美文网首页
打家劫舍

打家劫舍

作者: WAI_f | 来源:发表于2020-05-20 22:34 被阅读0次

题目:

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

示例:

输入: [1,2,3,1]
输出: 4
解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
偷窃到的最高金额 = 1 + 3 = 4 。

解题方法:

这道题和之前的爬阶梯相似,从大到小考虑思路会更清晰:

当小偷偷到第n间房子,那么:dp[n]={dp[n-2]+nums[n],dp[n-1]}

递推公式的意思就是,当偷到第n间房子,最大金额有两种可能:一种是不偷,那么dp[n]就是dp[n-1];还有一种可能就是偷,那就得从dp[n-2]累加,dp[n]=dp[n-2]+nums[n];最后就是推到0,1,2间房子的时候,直接进行判断就可以了。

代码和结果:

class Solution {
public:
    int rob(vector<int>& nums) {
        int len=nums.size();
        if(len==0)
            return 0;
        else if(len==1)
            return nums[0];
        else if(len==2)
            return nums[0]>nums[1]?nums[0]:nums[1];
        else
        {
            int maxv;
            int dp0=nums[0];                            //dp[i-2]
            int dp1=nums[0]>nums[1]?nums[0]:nums[1];    //dp[i-1]
            for(int i=2;i<nums.size();i++)
            {
                int cur=nums[i]+dp0;
                maxv=cur>dp1?cur:dp1;
                dp0=dp1;
                dp1=maxv;
            }
            return maxv;
        }
    }
};
运行结果:

原题链接:https://leetcode-cn.com/problems/house-robber/

相关文章

  • LeetCode-198-打家劫舍

    LeetCode-198-打家劫舍 198. 打家劫舍[https://leetcode-cn.com/probl...

  • 诗歌:小强盗

    小强盗 文/sunshine珊珊 去打家劫舍呀 只劫他一家 去打家劫舍呀 金山不要 银矿不要 去打家劫舍呀 只劫一...

  • 补卡-打家劫舍

    198. 打家劫舍

  • 返回大小姐星级酒店

    华东交大打家劫舍

  • v 的很简单

    打家劫舍看到半部分

  • 打家劫舍

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

  • 打家劫舍

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

  • 打家劫舍

    打家劫舍 经典的动态规划入门题目 题一 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷...

  • 打家劫舍

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

  • 打家劫舍

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/hous...

网友评论

      本文标题:打家劫舍

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