力扣 -- 740. 删除并获得点数
题目链接:
下面是用的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。
参考代码:
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]); } };
上一篇:
Java基础知识总结(2021版)