每日一题(力扣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];
    }
};
相关推荐
土司大王1 小时前
LeetCode hot100——对称二叉树
算法·leetcode·职场和发展
Navigator_Z2 小时前
LeetCode //C - 1208. Get Equal Substrings Within Budget
c语言·算法·leetcode
重生之后端学习7 小时前
53. 最大子数组和[中等]✅
java·数据结构·算法·leetcode·职场和发展
evans在进步10 小时前
LeetCode 438 找到字符串中所有字母异位词:滑动窗口与排序解法详解
算法·leetcode·职场和发展
码行山野赴时序归途10 小时前
从暴力到最优:三道 C 语言入门题的解法思路
c语言·开发语言·数据结构·算法·leetcode·排序算法
土司大王10 小时前
LeetCode hot100——随机链表的复制
算法·leetcode·链表
Tisfy12 小时前
LeetCode 3720.大于目标字符串的最小字典序排列:状态机 —— :从左往右枚举,失败则退回(最多退回一次)
linux·数据库·leetcode·字符串·状态机·构造
lvts_cs13 小时前
化工产业规划对城市发展的具体指导作用
算法·动态规划
土司大王15 小时前
LeetCode hot100——二叉树的最大深度
算法·leetcode·职场和发展
圣保罗的大教堂15 小时前
leetcode 3720. 大于目标字符串的最小字典序排列 中等
leetcode