美文网首页
动态规划——打家劫舍

动态规划——打家劫舍

作者: 水橋美咲 | 来源:发表于2018-07-30 11:26 被阅读0次
题目
打家劫舍

这道题也算是一道挺经典的题,即使不了解动态规划的人肯定也见过这道题。先来看代码

class Solution {
public:
    int rob(vector<int>& nums) {
        if(nums.size() <= 1){
            return nums.size() == 0 ? 0 : nums[0];
        }
        // a是上次的最大收益
        int a = nums[0];
        // b是当前的最大受益
        int b = max(nums[0], nums[1]);
        for(int i = 2; i < nums.size(); i++){
            int tmp = b;
            // 当前的最大收益是两种选择里较大的那个
            b = max(a + nums[i], b);
            a = tmp;
        }
        return b;
    }
};

如上图所示,某一次我们遍历到图中指向的那间房子,那么我们有两种选择,要么跳过当前的房子,要么选择当前的房子。我们要明白一点,任意前m间房子的选择结果一定是最优的,所以我们在选择时也要比较这两种选择,选出最优的结果。
现在唯一的问题就是怎么比较这两种选择哪一个比较好。因为题中要求不能选择连续的两间房子,所以我们就有如图所示的两种选择方式,分别用绿色和红色圈出。
我们设当前选择到了第m间房子,那第一种选择可以简化为前m-2间房子的最优选择再加上当前第m间房子;第二种选择可以简化为前m-1间房子的最优选择。我们只要用两个变量记录这两个值然后进行比较即可得到当前最优选择。

这里还有第二种解法,算法思想依然是一样的,不过采用的是倒着遍历,下面是代码,有兴趣的可以了解一下

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

相关文章

  • 动态规划——打家劫舍

    这道题也算是一道挺经典的题,即使不了解动态规划的人肯定也见过这道题。先来看代码 这里还有第二种解法,算法思想依然是...

  • [动态规划]-打家劫舍

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连...

  • 2022-02-19 动态规划高频题专题【1】

    动态规划基本类型 dp基础 背包问题 打家劫舍 股票问题 子序列问题 进阶动态规划 深入理解动态规划过程 定义dp...

  • 动态规划之——打家劫舍

    LeetCode198. 打家劫舍 题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,...

  • 动态规划之打家劫舍

    题目 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有...

  • 动态规划(六)

    这一次我们来看看动态规划中打家劫舍这一类的问题,在LeetCode中这类问题有:第198题:打家劫舍 https:...

  • LeetCode-打家劫舍(动态规划)

    题目链接 => 戳这里 解法

  • 初级算法-动态规划-打家劫舍

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连...

  • 198. 打家劫舍--动态规划

    题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装...

  • 337. 打家劫舍 III

    一 题目: 二 思路: 动态规划这道题目和之前的打家劫舍1[https://www.jianshu.com/p/f...

网友评论

      本文标题:动态规划——打家劫舍

      本文链接:https://www.haomeiwen.com/subject/rlsxvftx.html