力扣 -- 740. 删除并获得点数

题目链接: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]);
    }
};

 以上就是用动态规划的思想分析这道题目的整个过程啦,你学会了吗?如果以上题解对你有所帮助,那么就点亮一下小心心,点点关注呗,后期还会持续更新动态规划的经典题目哦,我们下期见!!!!! !!!!

猜你喜欢

转载自blog.csdn.net/weixin_70056514/article/details/131567988