Leetcode213. 打家劫舍 II 动态规划.线性动态规划.单串问题

思路

根据是否偷了第一家问题可以分成

  1. 偷了,则问题退化成:[0,n-2]的打家劫舍I,不考虑最后一家是否打劫.
  2. 没偷,问题退化成[1,n-1]的打家劫舍I.
    根据打家劫舍I的方法即可求解

代码

class Solution {
public:
    int robRange(vector<int>& nums, int start, int end) {
        int first = nums[start], second = max(nums[start], nums[start + 1]);
        int temp;
        for (int i = start + 2; i <= end; i++) {
            temp = second;
            second = max(first + nums[i], second);
            first = temp;
        }
        return second;
    }
    int rob(vector<int>& nums) {
        int length = nums.size();
        if (length == 1) {
            return nums[0];
        } else if (length == 2) {
            return max(nums[0], nums[1]);
        }
        return max(robRange(nums, 0, length - 2), robRange(nums, 1, length - 1));
    }
};

你可能感兴趣的:(算法题,算法,leetcode,c++)