打家劫舍 第一家和最后一家最多偷一家

class Solution:
    def rob(self , nums: List[int]) -> int:
        #dp[i]表示长度为i的数组,最多能偷取多少钱
        dp1 = [0 for i in range(len(nums) + 1)] 
        #选择偷了第一家
        dp1[1] = nums[0] 
        #最后一家不能偷
        for i in range(2, len(nums)): 
            #对于每家可以选择偷或者不偷
            dp1[i] = max(dp1[i - 1], nums[i - 1] + dp1[i - 2]) 
        res = dp1[len(nums) - 1]; 
        #第二次循环
        dp2 = [0 for i in range(len(nums) + 1)] 
        #不偷第一家
        dp2[1] = 0 
        #可以偷最后一家
        for i in range(2, len(nums) + 1): 
            #对于每家可以选择偷或者不偷
            dp2[i] = max(dp2[i - 1], nums[i - 1] + dp2[i - 2]) 
            #选择最大值
        return max(res, dp2[len(nums)])#牛客AI配图神器#
全部评论

相关推荐

牛客48826091...:哥们胸肌挺好看
点赞 评论 收藏
分享
不服输的外卷侠很健谈:杭电来我公司还是很有认可度的,可以来试试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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