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) 额外空间,适合大数据处理! 🚀

相关推荐
唐梓航-求职中19 小时前
编程-技术-算法-leetcode-288. 单词的唯一缩写
算法·leetcode·c#
仟濹19 小时前
【算法打卡day3 | 2026-02-08 周日 | 算法: BFS】3_卡码网99_计数孤岛_BFS | 4_卡码网100_最大岛屿的面积DFS
算法·深度优先·宽度优先
Ll130452529819 小时前
Leetcode二叉树part4
算法·leetcode·职场和发展
颜酱19 小时前
二叉树遍历思维实战
javascript·后端·算法
宝贝儿好19 小时前
第二章: 图像处理基本操作
算法
小陈phd20 小时前
多模态大模型学习笔记(二)——机器学习十大经典算法:一张表看懂分类 / 回归 / 聚类 / 降维
学习·算法·机器学习
@––––––20 小时前
力扣hot100—系列4-贪心算法
算法·leetcode·贪心算法
CoovallyAIHub20 小时前
让本地知识引导AI追踪社区变迁,让AI真正理解社会现象
深度学习·算法·计算机视觉
CoderCodingNo20 小时前
【GESP】C++ 二级真题解析,[2025年12月]第一题环保能量球
开发语言·c++·算法
yumgpkpm20 小时前
预测:2026年大数据软件+AI大模型的发展趋势
大数据·人工智能·算法·zookeeper·kafka·开源·cloudera