2024每日刷题(162)
Leetcode—740. 删除并获得点数
算法思想
实现代码
class Solution {
public:
int deleteAndEarn(vector<int>& nums) {
unordered_map<int, int> freq;
set<int> st;
sort(nums.begin(), nums.end());
int n = nums.size();
for(int i = 0; i < n; i++) {
freq[nums[i]]++;
st.insert(nums[i]);
}
// 2 3 3 5 6 6
// 2 3 5 6
// 2 6 11 18
int prev1 = 0, prev2 = 0, dp = 0;
int i = 0;
int prev = 0;
for(auto num: st) {
int curEarn = num * freq[num];
if(i > 0 && num == prev + 1) {
dp = max(prev1 + curEarn, prev2);
prev1 = prev2;
prev2 = dp;
} else {
dp = prev2 + curEarn;
prev1 = prev2;
prev2 = dp;
}
prev = num;
i++;
}
return dp;
}
};
运行结果
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!