首页 > 其他分享 >js.删除并获得点数

js.删除并获得点数

时间:2024-11-12 19:45:30浏览次数:3  
标签:arr 删除 nums sum js leftsum 点数

链接:740. 删除并获得点数 - 力扣(LeetCode)

题目:

给你一个整数数组 nums ,你可以对它进行一些操作。

每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。

开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。

示例 1:

输入:nums = [3,4,2]
输出:6
解释:
删除 4 获得 4 个点数,因此 3 也被删除。
之后,删除 2 获得 2 个点数。总共获得 6 个点数。

示例 2:

输入:nums = [2,2,3,3,3,4]
输出:9
解释:
删除 3 获得 3 个点数,接着要删除两个 2 和 4 。
之后,再次删除 3 获得 3 个点数,再次删除 3 获得 3 个点数。
总共获得 9 个点数。

思路:

若选择了多个值为 x 的元素,所有等于 x−1 或 x+1 的元素要被删除,同时要删除这多个x值并获得其点数。

先创建长度为数组中最大值+1的数组arr,将nums数组中的对应值x,加到arr[x]中去,得到的数组arr的每个值item为数组 nums 中所有相同元素item之和。

此时,这个题目就变成了打家劫舍题目,如[ 0, 0, 2, 3, 4 ]。

明白一个道理,前 i 个的最大点数为 如果前 i - 2 的最大点数加上第 i 个的点数大于前 i - 1 的最大点数,那么前 i 个的最大点数为前 i - 2 的最大点数加上第 i 个的点数,否则为前 i - 1 的最大点数。

每次循环开始时leftsum代表前 i - 2 的最大点数,sum代表前 i - 1 的最大点数。每次循环结束后leftsum代表前 i - 1 的最大点数,sum代表前 i 的最大点数。所有最后返回sum值。

代码:

/**

 * @param {number[]} nums

 * @return {number}

 */

var deleteAndEarn = function(nums) {

    let max = 0

    // 求出数组中的最大值

    nums.forEach((value)=>{

        max = value>max?value:max

    })

     // 创建长度为max+1的数组

    let arr = new Array(max + 1).fill(0)

   // 将所有相同元素的值加在一起

    for(item of nums){

        arr[item] += item

    }

    // 初始化

    // leftsum为前0个的最大点数,sum为前1个的最大点数

    let leftsum = 0 , sum = arr[1]

    for(let i = 2 ; i < arr.length ; i++ ){

        if(leftsum+arr[i]>sum) {

            let item = sum

            sum = leftsum + arr[i]

            leftsum = item

        }else{

            leftsum = sum

        }

    }

    return sum

};

标签:arr,删除,nums,sum,js,leftsum,点数
From: https://blog.csdn.net/qq_62541773/article/details/143721053

相关文章

  • nextjs 动态生成sitemap.xml 文件
    在app目录下创建文件sitemap.js,默认导出sitemap方法importfsfrom"fs";importpathfrom"path";constbaseUrl=process.env.NEXT_PUBLIC_SITE_URL||"https://www.adog.life";constbaseDir="src/app";constdynamicDirs=[......
  • 如何轻松快速地删除iPhone上的相册?
    iPhone上的相册非常适合整理您拍摄或下载的照片和视频。有了它们,您可以根据事件、地点或人物存储您的记忆。一些第三方应用程序(例如Instagram或WhatsApp)会在您允许的情况下自动创建相册来存储已发送或下载的照片。由于iPhone上的相册太多,您可能需要删除一些相册以释放存......
  • H.264/H.265播放器EasyPlayer.js无插件直播流媒体音视频播放器延迟丢帧的原因
    EasyPlayer.jsH5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)、WS、WEBRTC、FMP4视频直播与视频点播等多种协议,支持H.264、H.265、AAC、G711A、Mp3等多种音视频编码格式,支持MSE、WASM、WebCodec等多种解码方式,支持Windows、Linux、Android、iOS全平台终端的H5播放器,使用简单......
  • vue前端利用ofd.js实现ofd类型在线预览
    1.安装:npmiofd.js2.axios封装注意事项,responseType:'arraybuffer'//电子证件照exportfunctiongetXkzOriginal(data){returnreq({url:'/bigdata/getXkzOriginal',method:'POST',params:data,res......
  • 删除重复id的记录
    数据里面,id重复,创建时间不同 --新建字段repete_flag--针对重复id的数据,打标记updateyg_gate_base_bsetrepete_flag='REPETE'WHEREidIN(selectidfromyg_gate_base_bgroupbyidhavingcount(*)>1) select*fromyg_gate_base_bwhererepete_flag=......
  • PowerShell 重命名文件夹及删除空文件夹
    数据来源$urldata中的倒数第2列(子文件夹名称列)包含/、\等特殊字符某个文件夹重命名脚本foreach($iin0..100){#提取路径部分$basePath=($urldata[$i].split("`t")[-1]).trim()$subPath=($urldata[$i].split("`t")[-2].replace('"','')......
  • atrm——删除待执行任务队列中的指定任务
    转自于:https://github.com/jaywcjlove/linux-command,后不赘述atrm删除待执行任务队列中的指定任务补充说明atrm命令用于删除待执行任务队列中的指定任务。语法atrm(选项)(参数)选项-V:显示版本号。参数任务号:指定待执行队列中要删除的任务。实例删除已经排队的任......
  • node.js毕设虚拟财产交易系统(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于虚拟财产交易系统的研究,现有研究主要集中在虚拟货币、虚拟物品等方面,专门针对虚拟财产交易系统整体设计与实现的研究较少。因此,本选题将以虚拟财产......
  • node.js毕设摄影工作室管理系统(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于摄影工作室管理系统的研究,现有研究主要集中在摄影设备管理、摄影流程优化等方面,专门针对整个摄影工作室管理系统的设计与实现的研究较少。因此,本选......
  • JS初识_语法
    1.什么是JavaScript(简称JS)首先要了解前端以及Harmony生态中网站的组成部分(网站的三层结构)HTML表示了你的页面内有什么,组成页面的骨架(结构层)CSS表示了你的页面中每一个内容是什么样子的(样式层)JavaScript(简称js)表示了你的页面中每一个内容如何发生变化,有什么......