leetcode 740 删除并获得点数

news/2025/1/12 20:42:42/文章来源:https://www.cnblogs.com/dijia-blog1/p/18520852

740 删除并获得点数

题意

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

每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1nums[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 个点数。

思路

  1. 当我们操作完nums[i]的元素之后,必须要删除nums[i] - 1和nums[i+1]的所有元素,所以我们需要对数组做一个排序,这样nums[i+1]和nums[i-1]就是两个相连在一起的数据了。
  2. 他又需要获取操作操作的最大点数,所以我们需要对这些数做一个汇总。
  3. 然后就可以遍历处理之后的数组了。举个例子,我们处理完的数据是a_map = {1:3,4:10, 2:12,3: 13}。后面用a_map来表示这个映射,,key表示原始数据,value表示汇总之后的数据。
  4. 我们就可以获取到key之后,对他进行排序并遍历。(1,2,4】

开始判断要不删除当前元素

【1, 2, 3, 5】

当删除第一个元素可以获得数就是a_map[i]

删除第二个元素可以获得的数就是

判断第二个元素和第一个元素是否相邻的,如果是相邻的就从两个取一个最大值。如果不是就直接相加

依次排列。。。

由此我们的出的公式就是

不是相邻的
$$
s_i = a_map[nums_i] + s{i-1}
$$
相邻的
$$
s_i = max(a_map[nums_{i-2}] + nums_i, nums_{i - 1})
$$

代码

const deleteAndEarn = (nums: number[]): number => {const map: { [key: number]: number } = nums.reduce((a: { [key: number]: number }, b: number): {[key: number]: number} => {const value = a[b] || 0;a[b] = value + 1return a}, {})const keys = Object.keys(map).sort((a, b) => parseInt(a) - parseInt(b)).map(item => parseInt(item));const dp = new Array(nums.length).fill(0);// 边界情况if (nums.length === 0) return 0;else if (keys.length === 1) return map[keys[0]] * keys[0]// 给dp数组默认值dp[0] = keys[0] * map[keys[0]]// 开始写遍历console.log(keys)for (let i = 1; i < keys.length; i++) {// 判断是不是属于i-1或者i+1的情况if (keys[i] - 1 !== keys[i - 1]) {dp[i] = keys[i] * map[keys[i]] + dp[i - 1];} else {// 这里是属于i-1或者i+1的情况// 注意,需要注意一下当i是1时候我们要进行i-2,会有问题,所以我门这里也要单独判断一下。let last_value: numberif (i === 1) {last_value = 0;} else {last_value = dp[i - 2];}dp[i] = Math.max(last_value + keys[i] * map[keys[i]], dp[i - 1]);}}return dp[keys.length - 1];
}

截屏2024-10-25 00.09.10结语
如果对您有帮助的话,您可以搜搜一下正在努力的迪迦关注一下此公众号吗?谢谢您了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/825327.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Navicat 17下载与安装

1、安装包 Navicat 17: 链接:https://pan.quark.cn/s/c75e892c4705 提取码:YvyF Navicat 16: 链接:https://pan.quark.cn/s/63c07b20ea7b提取码:B9ij 2、安装教程(这里以安装Navicat 17 为例) 1) 如之前已安装的需卸载当前Navicat,如未安装,直接双击无限试用…

gitlab怎么保护分支

​GitLab作为一个流行的版本控制工具其中“分支保护”是一个关键功能,用以防止开发过程中的不当操作对代码造成不可逆的影响。本文将指导你如何在GitLab中保护分支:1.理解保护分支的重要性;2.学会使用GitLab的界面进行分支的保护操作;3.了解与合并请求的关联使用;4.探讨在…

[编程笔记] 搞人心态的代码含毒事件 “svn无法成功完成操作因为文件包含病毒或潜在的垃圾软件”

svn无法成功完成操作因为文件包含病毒或潜在的垃圾软件,Windows Defender误判?今天突然冒出来的问题,烦死了!     svn拉取代码报毒了,不用想,基本就是下面几个可能性:1、某人提交的代码有毒2、电脑上的第三方杀毒软件引发3、Windows Defender误判报毒的代码是一个dl…

AI作文批阅,AI素材管理……璞华集团携多款明星产品亮相智能社会治理论坛

2024年10月25日,金秋十月的璀璨时节,备受瞩目的第二届智能社会治理论坛暨中国光谷人工智能艺术大会在中国光谷盛大启幕。此次论坛汇聚了人工智能领域的顶尖智慧,共同探讨人工智能技术的最新突破与智能社会治理模式的创新路径,同时强调了科技与文化融合的无限可能。璞华集团…

有Redis为什么还要本地缓存?谈谈你对本地缓存的理解?

本地缓存是将数据存储在应用程序所在的本地内存中的缓存方式。既然,已经有了 Redis 可以实现分布式缓存了,为什么还需要本地缓存呢?接下来,我们一起来看。 为什么需要本地缓存? 尽管已经有 Redis 缓存了,但本地缓存也是非常有必要的,因为它有以下优点:速度优势:本地缓…

Adobe After Effects各版本安装包下载与安装

1、安装包我用夸克网盘分享了 After Effects 2024: 链接:https://pan.quark.cn/s/fac88adbac44 提取码:9ZMW After Effects 2023: 链接:https://pan.quark.cn/s/d41a0a447b93 提取码:4pwM After Effects 2022: 链接:https://pan.quark.cn/s/0070a59da58d 提取码:Eij1 Af…

Adobe InDesign 各版本下载与安装

1、安装包我用夸克网盘分享了「Adobe InDesign 2023.rar」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。 链接:https://pan.quark.cn/s/526c259dad6f 提取码:MfMXAdobe InDesign 2022: 链接:https://pan.quark.cn/s/c7ee80a21…

井底车场人员进入识别智慧矿山一体机人车防碰撞识别:矿山AI识别算法是如何训练的?

智慧矿山一体机是为矿山环境量身定制的智能设备,其核心任务是预防和减少重大安全风险,并充分利用边缘计算的视频智能识别技术。该设备能够提供包括安全监控、设备状态监测和灾害预警在内的多种智能化功能,完全满足矿山场景视频智能化建设的技术规范和验收标准。训练矿山视频…

Adobe Premiere pro 2022/2021/2020/2019/2018/2015 cc下载与安装

1、安装包下载Adobe Premiere pro 2022: 链接:https://pan.quark.cn/s/33db77cfb56b 提取码:7dbHAdobe Premiere pro 中文破解版: 链接:https://pan.quark.cn/s/c81bfd04e2aa 提取码:tNk1Adobe Premiere pro 2020 绿色精简: 链接:https://pan.quark.cn/s/69496dcc7351 …

Adobe Photoshop 2021下载与安装

1、安装包2021 Photoshop 2021 cc 免安装绿色中文版: 链接:https://pan.quark.cn/s/d32465740151 提取码:Ln9jPhotoshop 2021 cc 中文完整版: 链接:https://pan.quark.cn/s/daf54ca61e53 提取码:MF6UAdobe photoshop cc 2019中文完整版免激活: 链接:https://pan.quark.…

【原理】Redis热点Key自动发现机制和客户端缓存方案

作者:京东物流 京东物流 本文详细讲解下Redis热点key发现机制+客户端缓存的原理。 一、redis4.0之基于LFU的热点key发现机制 业务中存在访问热点是在所难免的,然而如何发现热点key一直困扰着许多用户,redis4.0为我们带来了许多新特性,其中便包括基于LFU的热点key发现机制。…

Mkyong-中文博客翻译-十一-

Mkyong 中文博客翻译(十一)原文:Mkyong 协议:CC BY-NC-SA 4.0找不到包装类 package.jaxws.methodName。你有没有倾向于生成它们?原文:http://web.archive.org/web/20230101150211/https://mkyong.com/webservices/jax-ws/wrapper-class-package-jaxws-methodname-is-not-…