uacs2024

导航

leetcode 213. 打家劫舍 II

213. 打家劫舍 II

与  198. 打家劫舍   相比,多了首和尾不能同时偷的条件

但是没写出来🤡

看了题解,可以比较  不偷首  和  不偷尾  ,哪个大就是最终答案

class Solution {
public:
    int rob2(vector<int>& nums,int left,int right){
        vector<int> dp(right-left+2);//dp[i]代表直到nums[i]为止能够偷到的最高金额;
        dp[left] = nums[left];
        if(right-left >= 1){
            dp[left+1] = max(nums[left],nums[left+1]);
        }
        for(int i = left + 2;i <= right;++i){
            dp[i] = max(dp[i-2] + nums[i],dp[i-1]);
        }
        return dp[right];
    }
    int rob(vector<int>& nums) {
        int n = nums.size();
        if(n == 1)  return nums[0];
        if(n == 2)  return max(nums[0],nums[1]);
        return max(rob2(nums,0,n-2),rob2(nums,1,n-1));
    }
};

 

    

 

posted on 2024-12-30 15:11  ᶜʸᵃⁿ  阅读(7)  评论(0)    收藏  举报