leetcode 213. 打家劫舍 II

2023.8.20

leetcode 213. 打家劫舍 II_第1张图片

         本题是 打家劫舍 的进阶版,房屋之间形成一个环了,也就是第一个房屋和最后一个房屋不能一起偷了。那么能偷的情况分为下列三种:

  1. 不考虑偷首房间。
  2. 不考虑偷尾房间。
  3. 不考虑偷首尾房间。

        第三种情况包含于第一和第二种情况了,所以分别为第一种和第二种情况设两个dp数组,再用昨天 打家劫舍 的思路做就行。 下面上代码:

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

        附上打的草稿以供参考:

leetcode 213. 打家劫舍 II_第2张图片

 

你可能感兴趣的:(leetcode专栏,leetcode,算法,职场和发展,c++,数据结构)