leetcode 740. 删除并获得点数
凭着感觉,莫名其妙迷迷糊糊地就通过了,自己也不知道怎么就过了,以下是题解的评论
// 每个位置上的数字是可以在两种前结果之上进行选择的:
// 1.如果你不删除当前位置的数字,那么你得到就是前一个数字的位置的最优结果。
// 2.如果你觉得当前的位置数字i需要被删,那么你就会得到 i - 2位置的那个最优结果加上当前位置的数字乘以个数。
// 以上两个结果,每次取最大的,记录下来,然后答案就是最后那个数字了。
class Solution {
public:
int deleteAndEarn(vector<int>& nums) {
int maxNum = *(max_element(nums.begin(), nums.end()));
vector<int> countNum(maxNum + 1);
for(int &num : nums) ++countNum[num];
vector<int> dp(maxNum + 1);//dp[i]代表直到 数字 i 所能得到的最大点数
if(countNum[1] != 0){
dp[1] = countNum[1];
}
for(int i = 2;i <= maxNum;++i){
dp[i] = max(i * countNum[i] + dp[i - 2],dp[i - 1]);
}
return dp[maxNum];
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧