力扣 198. 打家劫舍

60 阅读1分钟

🔗 leetcode.cn/problems/ho…

题目

  • 给一个数组,可以取其中的数字,要求是不能同时取相邻近的数字
  • 返回可以取数字的 sum 的最大值

思路

  • dp

  • 遍历下标,当前位置可以取到的最大值,为下述两种方式的最大值

    • 取当前位置 + 取 - 2 位置的和
    • 不取当前位置,等于取 -1 位置的值

代码

class Solution {
public:
    int rob(vector<int>& nums) {
        vector<int> dp(nums.size()+1);
        dp[0] = 0;
        dp[1] = nums[0];
        for (int i = 1; i < nums.size(); i++) {
            dp[i+1] = max(nums[i] + dp[i-1], dp[i]);
        }
        return dp[nums.size()];
        
    }
};