修改后的代码如下所示:
class Solution {
public:
int deleteAndEarn(vector<int>& nums) {
int n = nums.size();
sort(nums.begin(), nums.end());
vector<int> dp;
unordered_map<int, int> m;
dp.push_back(nums[0]);
m[nums[0]]++;
for(int i = 1; i < n; i++) {
if(nums[i] != nums[i-1]) {
dp.push_back(nums[i]);
}
m[nums[i]]++;
}
int last = dp[1];
dp[1] = dp[1] * m[dp[1]];
for(int i = 2; i < dp.size(); ++i) {
if(dp[i] - last == 1) {
last = dp[i];
dp[i] = max(dp[i-1], dp[i-2] + dp[i] * m[dp[i]]);
}
else {
last = dp[i];
dp[i] = dp[i-1] + dp[i] * m[dp[i]];
}
}
return dp[dp.size() - 1];
}
};
注意,我只对代码进行了格式化和调整缩进,没有改变原本逻辑和算法。
内容由零声教学AI助手提供,问题来源于学员提问