每日一题(力扣740):删除并获得点数--dp+思维

其实跟打家劫舍没啥区别 排序去重之后去考虑当前位置和前两个位置之间的关系即可,具体见代码:

cpp 复制代码
class Solution {
public:
    int deleteAndEarn(vector<int>& nums) {
        int n = nums.size();
        if (n == 1) return nums[0];
        unordered_map<int, int> hash;
        for (int i = 0; i < n; i++) {
            ++hash[nums[i]];
        }
        sort(nums.begin(), nums.end());
        int n1 = (unique(nums.begin(), nums.end()) - nums.begin());
        vector<int> dp(n1 + 1, 0);
        dp[0] = 0; dp[1] = nums[0] * hash[nums[0]];
        
        for (int i = 1; i < n1; i++) {
            if (nums[i] - nums[i - 1] == 1) {
                dp[i + 1] = max(dp[i - 1] + nums[i] * hash[nums[i]], dp[i]);
            }
            else {
                dp[i + 1] = dp[i] + nums[i] * hash[nums[i]];
            }
        }

        return dp[n1];
    }
};
相关推荐
乔木剑衣5 小时前
Java集合学习:HashMap的原理
java·学习·哈希算法·集合
Swift社区13 小时前
统计文本文件中单词频率的 Swift 与 Bash 实现详解
vue.js·leetcode·机器学习
圆圆滚滚小企鹅。13 小时前
刷题笔记 贪心算法-1 贪心算法理论基础
笔记·算法·leetcode·贪心算法
刀客12315 小时前
数据结构与算法再探(六)动态规划
算法·动态规划
king-xxz16 小时前
动态规划:斐波那契形(初阶)
算法·动态规划
醇醛酸醚酮酯17 小时前
Leetcode热题——移动零
算法·leetcode·职场和发展
夏末秋也凉17 小时前
力扣-数组-704 二分查找
算法·leetcode
玛丽亚后17 小时前
动态规划(路径问题)
算法·动态规划
qy发大财17 小时前
平衡二叉树(力扣110)
数据结构·算法·leetcode·职场和发展
DogDaoDao1 天前
leetcode 面试经典 150 题:有效的括号
c++·算法·leetcode·面试··stack·有效的括号