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.
func max(a, b int) int {
if a < b {
return b
}
return a
}
func rob(nums []int) int {
if nums == nil || len(nums) == 0 {
return 0
}
if len(nums) == 1 {
return nums[0]
}
helper := func(arr []int) int {
var pre, cur int
for _, v := range arr {
cur, pre = max(pre+v, cur), cur
}
return cur
}
return max(helper(nums[:len(nums)-1]), helper(nums[1:]))
}
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.
var rob = function(nums) {
if (!nums || nums.length === 0) {
return 0
}
if (nums.length === 1) {
return nums[0]
}
const helper = function(nums) {
let cur = 0,
pre = 0
nums.forEach(e => {
[cur, pre] = [Math.max(pre + e, cur), cur]
})
return cur
}
const first = nums.slice(1)
nums.pop()
return Math.max(helper(nums), helper(first))
};
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.
var rob = function(nums) {
if (!nums || nums.length === 0) {
return 0
}
if (nums.length === 1) {
return nums[0]
}
const helper = function(nums) {
let cur = 0,
pre = 0
for (const i of nums) {
let tmp = cur
cur = Math.max(pre + i, cur)
pre = tmp
}
return cur
}
const first = nums.slice(1)
nums.pop()
return Math.max(helper(nums), helper(first))
};
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.