# 题目描述

# 思路与题解

这题我承认我没有解出来,还是看了官方题解后才有思路的 🤣 怎么说呢,这道题如果你能转过弯,把它映射到我们前几道题所做的打家劫舍上,那这个题就很简单啦,关键就在于如何把这个题转换为打家劫舍~

再看一遍题干, 你必须删除所有等于 nums[i] - 1 和 nums[i] + 1 的元素 ,意思不就是如果我们要获取 nums [i] 房屋的财产,那就不能获取 nums [i] 相邻两间房屋的财产了,所以我们的思路就是要把相同点数 i 累加起来,作为 nums [i] 的财产值,然后再用打家劫舍的滚动数组就可以啦

再次感叹一句,思路才是最重要和最宝贵的呀~

class Solution {
public:
    int deleteAndEarn(vector<int>& nums) {
        int mv = 0;
        for (int v : nums) mv = max(v, mv);
        vector<int> sum(mv + 1);
        for (int v : nums) sum[v] += v;
        return rob(sum);
    }
private:
    int rob(vector<int>& nums) {
        int n = nums.size();
        int prev = 0, curr = nums[0];
        for (int i = 0; i < n; ++i) {
            int next = max(curr, prev + nums[i]);
            prev = curr;
            curr = next;
        }
        return curr;
    }
};
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

宇凌喵 微信支付

微信支付

宇凌喵 支付宝

支付宝