题目链接:740. 删除并获得点数 - 力扣(LeetCode)
下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。
参考代码:
class Solution {
public:
int deleteAndEarn(vector<int>& nums) {
//根据题意,nums[i]的值满足1<=nums[i]<=10000
//所以哈希表映射可以开一个10001个空间的大小
const int n=10001;
int arr[n]={0};
//把大小等于nums[i]的值的综合映射到arr数组中下标为nums[i]的位置上去
for(const auto& x:nums)
{
arr[x]+=x;
}
//以下就变成了对arr数组做打家劫舍问题
vector<int> f(n);
vector<int> g(n);
//初始化
f[0]=arr[0];
g[0]=0;
//填表,因为arr数组的每一个位置都有可能有值,所以要遍历整个arr数组
for(int i=1;i<n;i++)
{
f[i]=g[i-1]+arr[i];
g[i]=max(f[i-1],g[i-1]);
}
return max(f[n-1],g[n-1]);
}
};
以上就是用动态规划的思想分析这道题目的整个过程啦,你学会了吗?如果以上题解对你有所帮助,那么就点亮一下小心心,点点关注呗,后期还会持续更新动态规划的经典题目哦,我们下期见!!!!! !!!!