力扣每日一题:740.删除并获得点数 python动态规划详解!

力扣 740. 删除并获得点数 题目描述 给你一个整数数组 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. 阅读详情

740.删除并获得点数

https://leetcode-cn.com/problems/delete-and-earn/

难度:中等

题目:

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

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

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

提示:

  • 1 <= nums.length <= 2 * 10^4
  • 1 <= nums[i] <= 10^4

示例:

示例 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 个点数。

分析

如果朋友之前做过打家jie舍两部曲,那么看到这题应该很快反应到应该考虑动态规划。
很多朋友问遇到题,你怎么知道应该考虑到什么算法,没什么知道不知道,同类型题做的多了自然就知道了。

不熟悉的同学,可以看看我的历史解题:

那么,今天这道题其实就是在打家jie舍的基础上进行了扩展。我们可以通过hash表将这道题还原回去:

  1. 这道题存在重复数字,我们先通过的d = collections.Count(nums)将其转化为dict类型.
  2. 我们使用k = sorted(d.keys(),reverse=True)转化为递减的数组
  3. 现在我们再来看这道题是不就和打家jie舍很类似了。
  4. 如果len(k) == 1,k[0],那么总和为k[0] * d[k[0]],但len(k) == 2时需要注意下
  5. 如果k[0] - k[1] > 1,那么按照题意是可以并存的,此时k[1] = k[0] * d[k[0]] + k[1] * d[k[1]]
  6. 如果k[0] - k[1] <= 1,那么只能二选一, max(k[0] * d[k[0]], k[1] * d[k[1]])
  7. 如法炮制,使用for循环遍历最终即可得到结果。

上面的分析大家理解了吧?

算法的时间复杂度O(n),由于创建了去重的k,所以空间复杂度最坏情况为O(n)。

来看看具体解题,还不错,超过了96.5%的python用户。

image.png

解题:

from collections import Counter
class Solution:
    def deleteAndEarn(self, nums):
        d = Counter(nums)
        k = sorted(d.keys(),reverse=True)
        ln = len(k)
        if ln == 1:
            return k[0] * d[k[0]]
        left = k[0] * d[k[0]]
        if k[0] - k[1] > 1:
            right = left + k[1] * d[k[1]]
        else:
            right = max(left, k[1] * d[k[1]])
        for i in range(2,ln):
            left, tmp = right, left
            if k[i - 1] - k[i] > 1:
                right += k[i] * d[k[i]]
            else:
                right = max(tmp+k[i] * d[k[i]],right)
        return right

欢迎关注我的公众号: 清风Python,带你每日学习Python算法刷题的同时,了解更多python小知识。

我的个人博客:https://qingfengpython.cn

力扣解题合集:https://github.com/BreezePython/AlgorithmMarkdown

高校毕业生跟踪系统设计:从核心需求到技术实现全解析 毕业生跟踪信息管理系统是高校信息化建设中的重要组成部分,其核心在于构建一个结构化、持续化的数据采集与分析流程。系统通常采用B/S架构,结合数据库技术,实现对学生离校后就业去向、职业发展等信息的动态管理。从技术原理上看,这类系统通过权限分离、数据流设计及扩展性考量,解决了传统人工跟踪方式效率低、数据零散的问题,其技术价值在于为学校评估教育成果、优化专业设置提供了数据支撑。在实际应用场景中,系统需涵盖基础信息管理、就业跟踪、问卷调查、统计分析及系统管理等核心模块,并注重毕业生端用户体验与数据安全。本文以典型项目 阅读详情

相关推荐

Keysight ADS新手必看:3分钟搞定TDR模拟的保姆级教程(附差分信号设置技巧)

本文为Keysight ADS新手提供TDR模拟的保姆级教程,详细介绍了从基础环境准备到差分信号设置的全流程。通过内置模板调用、待测器件连接和仿真结果解读,帮助用户快速掌握TDR模拟技术,特别包含差分信号配置技巧,提升信号完整性分析效率。

weixin_30872157的博客 197

LeetCode 每日一题 740. 删除并获得点数

740. 删除并获得点数 给你一个整数数组 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: 输入:nu

雷震子的博客 812

基于强化学习框架的交易策略学习过程

每个状态s∈S 是一个由六个微观结构特征构成的向量,这些特征反映了当前市场的订单簿状态和近期交易行为。

xu624735206的博客 1111

《LeetCode之每日一题》:21.删除并获得点数

删除并获得点数有关题目题解 题目链接:删除并获得点数 有关题目 给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。 之后,你必须删除每个等于 nums[i] - 1 或 nums[i] + 1 的元素。 开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。 示例 1: 输入:nums = [3,4,2] 输出:6 解释: 删除 4 获得 4 个点数,因此 3 也被删除。 之后,删除 2 获得 2 个点数。

MerryMaking7946的博客 645

图像超分辨率在医学影像中的应用:如何用深度学习提升CT/MRI图像质量

本文探讨了深度学习驱动的图像超分辨率技术在医学影像(如CT/MRI)质量提升中的应用。文章分析了医学图像超分辨率在提升诊断信息含量、平衡保真度与临床相关性方面的独特挑战,并详细介绍了如何针对3D体数据特点定制模型架构、设计病理感知损失函数,以及解决高质量配对数据稀缺的策略。通过实战案例,阐述了从数据模拟、模型训练到临床评估的完整流程,旨在为医学影像的清晰化与诊断精准化提供有效解决方案。

weixin_29063681的博客 523

手把手教你用Boot-Repair快速修复Ubuntu启动分区缺失(附详细命令行步骤)

本文详细介绍了如何使用Boot-Repair工具快速修复Ubuntu启动分区缺失问题,包括诊断、应急准备、自动修复和手动命令操作。通过grub rescue模式下的关键命令和Boot-Repair的图形界面操作,帮助用户高效解决启动分区故障,确保系统恢复正常运行。

weixin_29229989的博客 563

【LeetCode】LeetCode之删除并获得点数——动态规划、排序+动态规划

LeetCode之打家劫舍【暴力递归、动态规划、动态规划之优化空间的具体分析与实现】 LeetCode之打家劫舍Ⅱ——暴力递归+动态规划解决循环问题+DP空间优化 1.题目描述 给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。 开始你拥有 0 个点数。返回你能通过这些操作获

Kevinnsm的博客 798

【电击防护篇】电击防护技术详解:从人体效应到接地系统全解析

本文系统讲解了电击防护的关键知识,包括电流对人体的影响(如30mA是心室颤动阈值)、人体电阻特性(700Ω-6100Ω)以及电气接触防护措施。重点分析了TT、TN和IT三大接地系统的结构特点与应用场景,强调TN-S系统最安全,IT系统供电连续性最佳。详细介绍了漏电保护器(RCD)的工作原理与选型指南,建议人身防护选用30mA高灵敏度RCD。文章通过对比表总结三大系统的安全性、成本及适用场景,为电气安全设计提供实用参考。

2301_81299416的博客 1743

动态规划训练营(leetcode)

1.删除并获得点数 题目描述: 给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。 开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数 思路: 注意到若 \textit{nums}nums 中不存在某个元素 xx,则选择任一小于 xx 的元素不会影响到大于 xx 的元素的选择。...

m0_58086930的博客 544

ENVI遥感技术

记录2024.03.06所遇到的遥感问题

qq_44453923的博客 4332

Python爬虫实战:使用最新技术爬取路透社新闻数据

网络爬虫(Web Crawler)是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。随着大数据和人工智能技术的发展,爬虫技术在数据采集、市场分析、舆情监控等领域发挥着越来越重要的作用。requests:同步HTTP请求库aiohttp:异步HTTP请求库:HTML解析库lxml:高效的HTML/XML解析库selenium:浏览器自动化工具playwright:现代浏览器自动化工具pandas:数据处理和分析库scrapy:专业的爬虫框架:生成随机User-Agentredis:缓存和分布式爬虫支持。

2201_76125261的博客 1204

【Leetcode每日一题】2021-05-04 740 删除并获得点数 - 中等 - 动态规划 (Python & C++)

来源:力扣 给你一个整数数组 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

weixin_46062098的博客 370

基于YOLOv11的仓库机器人导航系统设计与实现:Amazon Robotics Challenge解决方案

本文将详细介绍一个基于YOLOv11目标检测算法的仓库机器人导航系统,该系统能够准确识别托盘(pallet)和箱子(box),为机器人提供精确的导航信息。而基于深度学习的视觉导航系统能够实时识别环境中的关键物体,如托盘和箱子,从而实现更智能的路径规划和货物搬运。YOLOv11作为YOLO系列的最新演进版本,在检测精度和速度上都有显著提升,非常适合仓储环境中的实时物体检测任务。YOLOv11在保持实时性的同时,提高了对小物体和密集物体的检测能力,这对仓储环境中的托盘和箱子检测尤为重要。

YOLO 303

每日一题(day3)

你好,我是辰chen,一个正在考研途中的 sophomore dog 目前每日一题主要来自于 leetcode,当然也可能来自洛谷或其他刷题平台,每日一题专栏地址:每日一题 欢迎大家的关注,我的博客主要关注于考研408以及AIoT的内容 每日一题我会给出两种代码,C版以及 Pytho版,刷题的目的是为了考研的算法题以及机试(或手写代码) 这也是为什么不用 C++ 而用 C,Python版代码是为了提高语言熟练度(以后开发大概率用的是 Python 坚持打卡!踏踏实实走好每一步 以下的几个专栏是本人比较满意的

佛系更新 2849

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

[20210505]LeetCode每日一题 - 740. 删除并获得点数

题目描述 给你一个整数数组 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 =

全栈攻城狮? 366

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

力扣-740.删除并获得点数

新建数组number来存取nums中每个数出现的个数总和,其中number中的i表示nums中的数,i位置对应的值表示,对应的数的总和 对于示例2,有number = [0,0,4,9,4] 表示nums中数字0总和0,数字1总和0,数字2总和4,数字3总和9,数字4总和4 由于删除 nums[i] 后,需要同时删除 nums[i]+1 和 nums[i]-1(nums[i]+1 和 nums[i]-1 不需要计点数),在number数组中意味着获取当前 number[i] 后,就不用获取 num..

Node_Su的博客 535

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

力扣740. 删除并获得点数

这道题相当于当你选定一个数时,你左右两侧-1,+1的两个数都不能选了,所以,设置一个dp数组,长度为nums数组中的最大值,存储在nums数组中出现的相同元素之和,然后判断dp。的大小关系,取最大值进行保留,这样这个最大值就相当于nums中,所有小于i的数,所能删除的最大点数。之后,再次删除 3 获得 3 个点数,再次删除 3 获得 3 个点数。删除 3 获得 3 个点数,接着要删除两个 2 和 4。之后,删除 2 获得 2 个点数。总共获得 6 个点数。删除 4 获得 4 个点数,因此 3 也被删除。

a2730595898的博客 150

[力扣c语言实现]740. 删除与获得点数

740. 删除与获得点数1. 题目描述2.代码如下 1. 题目描述 给定一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除每个等于 nums[i] - 1 或 nums[i] + 1 的元素。 开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。 示例 1: 输入: nums = [3, 4, 2] 输出: 6 解释: 删除 4 来获得 4 个点数,因此 3 也被删除。 之后,删除 2 来获得 2 个

dengwodaer的博客 384

力扣--动态规划740.删除并获得点数

值得一提的是:例如2 2 3 3 3 4 这个,你会发现,虽然一次你只能取一个数,但是可以取多次,就比如,我第一次取3,两个2 和 4都删了,但是我还可以继续取两次3,2和4都删完了嘛,又没影响。所以我们把每个数(3)所占的点数(3×3=9)组成个新数组,用。数组大小为最大元素值加一,初始化所有元素为零。返回动态规划数组中最后一个元素的值,即为最终的最大点数。首先,找到输入数组中的最大元素,以确定新数组的大小。,选择是否包含当前元素,以确保不相邻元素被选择。遍历原始数组,将相同的元素值的点数累积到。

weixin_73865269的博客 492

【力扣】740.删除并获得点数

之后,再次删除 3 获得 3 个点数,再次删除 3 获得 3 个点数。删除 3 获得 3 个点数,接着要删除两个 2 和 4。之后,删除 2 获得 2 个点数。总共获得 6 个点数。删除 4 获得 4 个点数,因此 3 也被删除。返回你能通过这些操作获得的最大点数。,你可以对它进行一些操作。每次操作中,选择任意一个。总共获得 9 个点数。

2302_80216196的博客 389

LeetCode-Python-740. 删除与获得点数

给定一个整数数组nums,你可以对它进行一些操作。 每次操作中,选择任意一个nums[i],删除它并获得nums[i]的点数。之后,你必须删除每个等于nums[i] - 1或nums[i] + 1的元素。 开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。 示例 1: 输入: nums = [3, 4, 2] 输出: 6 解释: 删除 4 来获得 4 个点数...

Keep Coding 762

python动态规划入门,从斐波那契数列到01背包

动态规划,背包问题

m0_63570394的博客 914

【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 =

weixin_44623662的博客 611

动态规划—删除并获得点数(leetcode 740)

题目描述 给你一个整数数组 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: 输入

guoxinian的专栏 435

【知识迁移】力扣刷题- 删除并获得点数(Python 实现)

快速通道 740. 删除并获得点数 前言 有些题目比较隐晦,拿到题目毫无头绪,又不像刷举一反三系列一样,由易到难,本文主要记录解题的思路。 740. 删除并获得点数 给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除每个等于 nums[i] - 1 或 nums[i] + 1 的元素。 开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。 来源:力扣(LeetCode) 解题 拿到该题,再

一个技术迷的博客 365
上一篇: 力扣每日一题:16.最接近的三数之和 双指针解法
下一篇: 力扣每日一题:1720.解码异或后的数组 python异或操作
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值