第198题:打家劫舍

解题思路

198. 打家劫舍
此题的求解思路跟斐波那契数列的求解思路是相同的。
如果从第k号房子开始从后往前偷,第K号房子可以有二种情况:偷或者不偷。这唯一的二种情况就会出现二种不同的金额,选择较大的金额就是从第k号房子开始从后往前偷所能偷到的最大金额。

下面是官方的题解思路,感觉很不错!!!

首先考虑最简单的情况。如果只有一间房屋,则偷窃该房屋,可以偷窃到最高总金额。如果只有两间房屋,则由于两间房屋相邻,不能同时偷窃,只能偷窃其中的一间房屋,因此选择其中金额较高的房屋进行偷窃,可以偷窃到最高总金额。

如果房屋数量大于两间,应该如何计算能够偷窃到的最高总金额呢?对于第 k(k>2) 间房屋,有两个选项:

1、偷窃第 k间房屋,那么就不能偷窃第 k-1间房屋,偷窃总金额为前 k-2 间房屋的最高总金额与第k间房屋的金额之和。

2、不偷窃第k间房屋,偷窃总金额为前k-1间房屋的最高总金额。

在两个选项中选择偷窃总金额较大的选项,该选项对应的偷窃总金额即为前k间房屋能偷窃到的最高总金额。

代码

class Solution {
//运行时间:0 ms    内存消耗:36.1ms
    //非递归实现:从后往前偷
    public int rob(int[] nums) {
        if(nums == null || nums.length == 0) return 0;
        if(nums.length == 1) return nums[0];
        int first = nums[0];
        int second = Math.max(nums[0],nums[1]);
        
        for(int i=2; i<nums.length; i++){
            int temp = second;
            second = Math.max(nums[i]+first,second);
            first = temp;
        }
        return second;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值