美文网首页
198. 打家劫舍

198. 打家劫舍

作者: zhangsini | 来源:发表于2019-10-24 14:36 被阅读0次

    [toc]


    leetcode

    难度:easy

    题目

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

    给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

    示例 1:
    输入: [1,2,3,1]
    输出: 4
    解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
         偷窃到的最高金额 = 1 + 3 = 4 。
         
    示例 2:
    输入: [2,7,9,3,1]
    输出: 12
    解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
         偷窃到的最高金额 = 2 + 9 + 1 = 12 。
    

    思路

    动态规划。
    最大利益 = max(上家的最大利益,上家的上家的最大利益 + 当前家的利益)
    

    题解

    解法1:动态规划

    class Solution(object):
        def rob(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            last = 0        # 上一家
            pre_max = 0     # 前面所有的最大收益
            for cur in nums:
                last, pre_max = pre_max, max(pre_max, last+cur) # 注意最右边的 pre_max 表上家的上家的最大利益
            return pre_max
            
    

    相关文章

      网友评论

          本文标题:198. 打家劫舍

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