Note: This is an extension of House Robber.
After robbing those houses on that street, the thief has found himself a new place for his thievery so that he will not get too much attention. This time, all houses at this place are arranged in a circle. That means the first house is the neighbor of the last one. Meanwhile, the security system for these houses remain the same as for those in the previous street.
Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
class Solution(object):
def rob(self, nums):
#print nums
res = 0
if not nums:
return 0
if len(nums) == 1:
return nums[0]
steal = [0] * len(nums)
notsteal = [0] * len(nums)
steal[1] = nums[1]
for i in range(1,len(nums)):
#print i,'~'
steal[i] = notsteal[i-1] + nums[i]
notsteal[i] = max(steal[i-1],notsteal[i-1])
res = max(steal[-1],notsteal[-1])
#print res
steal = [0] * len(nums)
notsteal = [0] * len(nums)
steal[0] = nums[0]
#print nums
for i in range(0,len(nums) - 1):
#print i
steal[i] = notsteal[i-1] + nums[i]
notsteal[i] = max(steal[i-1],notsteal[i-1])
res = max(res,steal[-2],notsteal[-2])
return res