python-leetcode-删除并获得点数

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

解法 1:动态规划(O(n) 时间,O(n) 空间)

python 复制代码
class Solution:
    def deleteAndEarn(self, nums: List[int]) -> int:
        if not nums:
            return 0

        # 统计每个数的贡献
        points = Counter(nums)
        max_val = max(nums)  # 找到数组中的最大值
        dp = [0] * (max_val + 1)

        # 构造 dp 数组
        for num in range(max_val + 1):
            dp[num] = num * points[num]

        # 打家劫舍
        prev, curr = 0, 0
        for num in range(max_val + 1):
            prev, curr = curr, max(curr, prev + dp[num])
        
        return curr

时间复杂度O(n)(遍历 nums 统计次数 + 遍历 dp 计算)

空间复杂度O(n)(使用 dp 数组)

解法 2:优化的动态规划(O(n) 时间,O(1) 空间)

  • 空间优化 :只存储 prevcurr,减少 dp 数组占用。
python 复制代码
class Solution:
    def deleteAndEarn(self, nums: List[int]) -> int:
        if not nums:
            return 0

        points = Counter(nums)
        max_val = max(nums)
        
        prev, curr = 0, 0  # 滚动变量代替 dp 数组
        for num in range(max_val + 1):
            prev, curr = curr, max(curr, prev + num * points[num])
        
        return curr

时间复杂度O(n)

空间复杂度O(1)(只用两个变量)

总结

方法 时间复杂度 空间复杂度 适用情况
DP 数组版 O(n) O(n) 适用于小规模输入
DP 滚动变量 O(n) O(1) 推荐,适合大规模输入

最佳选择 :用 滚动变量 版本,避免 O(n) 额外空间,适合大数据处理! 🚀

相关推荐
不是吧这都有重名36 分钟前
[论文阅读]Deeply-Supervised Nets
论文阅读·人工智能·算法·大语言模型
homelook41 分钟前
matlab simulink双边反激式变压器锂离子电池均衡系统,双目标均衡策略,仿真模型,提高均衡速度38%
算法
什码情况1 小时前
星际篮球争霸赛/MVP争夺战 - 华为OD机试真题(A卷、Java题解)
java·数据结构·算法·华为od·面试·机试
天上路人2 小时前
采用AI神经网络降噪算法的通信语音降噪(ENC)模组性能测试和应用
人工智能·神经网络·算法
字节高级特工2 小时前
【C++】”如虎添翼“:模板初阶
java·c语言·前端·javascript·c++·学习·算法
.Vcoistnt2 小时前
Codeforces Round 1024 (Div. 2)(A-D)
数据结构·c++·算法·贪心算法·动态规划·图论
晴天下小雨o2 小时前
排序算法总结
java·算法·排序算法
程序员爱钓鱼2 小时前
循环语句:for、range -《Go语言实战指南》
java·数据结构·算法
LabVIEW开发3 小时前
LabVIEW中算法开发的系统化解决方案与优化
算法·labview
wen__xvn3 小时前
每日一题洛谷P8662 [蓝桥杯 2018 省 AB] 全球变暖c++
c++·职场和发展·蓝桥杯