每日一题(力扣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];
    }
};
相关推荐
想吃火锅10056 小时前
【leetcode】3.无重复字符的最长字串js版
算法·leetcode·职场和发展
fengxin_rou6 小时前
LeetCode链表经典五题:从相交到环形,双指针的妙用
算法·leetcode·链表
8Qi816 小时前
LeetCode 213:打家劫舍 II(House Robber II)—— 题解 ✅
算法·leetcode·职场和发展·动态规划
Lsk_Smion17 小时前
力扣实训 _ [75].颜色分类 _ 杨辉三角
数据结构·算法·leetcode
8Qi819 小时前
LeetCode 1049:最后一块石头的重量 II —— 题解 ✅
算法·leetcode·职场和发展·动态规划·01背包
运筹vivo@1 天前
LeetCode 2574. 左右元素和的差值
算法·leetcode·职场和发展·每日一题
一只齐刘海的猫1 天前
【Leetcode】移动零
算法·leetcode·职场和发展
workflower1 天前
医院核心竞争力的四大重构
人工智能·安全·设计模式·重构·动态规划·scrum
人道领域1 天前
【LeetCode刷题日记】131.分割回文串,动态规划优化
java·开发语言·leetcode
汉克老师1 天前
GESP6级C++考试语法知识(五十三、动态规划----背包问题(六、分组背包)
c++·动态规划·背包问题·gesp6级·gesp六级·分组背