149 - 213 打家劫舍2

题目

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

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

示例 1:

输入: [2,3,2] 输出: 3 解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。

示例 2:

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

解答

https://leetcode-cn.com/problems/house-robber-ii/solution/213-da-jia-jie-she-iidong-tai-gui-hua-jie-gou-hua-/

class Solution:
    def rob(self, nums: List[int]) -> int:
        if not nums or len(nums) == 0:
            return 0
        if len(nums) == 1:
            return nums[0]

        def helper(nums):
            cur, pre = 0, 0
            for i in nums:
                cur, pre = max(pre+i, cur), cur
            return cur
        return max(helper(nums[:-1]), helper(nums[1:]))

Runtime: 28 ms, faster than 95.53% of Python3 online submissions for House Robber II.

Memory Usage: 12.8 MB, less than 100.00% of Python3 online submissions for House Robber II.

Runtime: 0 ms, faster than 100.00% of Go online submissions for House Robber II.

Memory Usage: 2 MB, less than 100.00% of Go online submissions for House Robber II.

Runtime: 48 ms, faster than 93.93% of JavaScript online submissions for House Robber II.

Memory Usage: 34.6 MB, less than 33.33% of JavaScript online submissions for House Robber II.

Runtime: 60 ms, faster than 30.34% of JavaScript online submissions for House Robber II.

Memory Usage: 33.8 MB, less than 66.67% of JavaScript online submissions for House Robber II.

Last updated

Was this helpful?