快捷搜索: 王者荣耀 脱发

力扣 -- 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]);
    }
};
经验分享 程序员 微信小程序 职场和发展