题解 | 打家劫舍(二)

打家劫舍(二)

https://www.nowcoder.com/practice/a5c127769dd74a63ada7bff37d9c5815

class Solution {
public:
 /*
  有三种情况:偷第一家不偷最后一家;偷最后一家不偷第一家;首末两家都不偷;
  动态规划进行, 分两种情况求解, 第三种情况包含
*/
    int rob(vector<int>& nums) {
       vector<int> dp(nums.size()+1, 0);

        int res =nums[0];
        dp[1] = nums[0];  //选择偷第一家
       for(int i=2; i<nums.size(); i++){  //最后一家不遍历
            dp[i] = max( dp[i-1], nums[i-1]+dp[i-2] );
            res = max(res, dp[i]);
       }

       dp.clear();
       dp[0] = 0, dp[1] = 0;  //第一家不偷
        for(int i=2; i<=nums.size(); i++){
            dp[i] = max( dp[i-1], dp[i-2]+nums[i-1]);
            res = max(res, dp[i]);
        }

       return res;
    }
};

全部评论

相关推荐

牛客44320985...:你的当务之急是把这个糖的要死的沟槽ide主题改了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务