Python Solution:
class Solution: def rob(self, nums: List[int]) -> int: n=len(nums) if n==0: return 0 if n==1: return nums[0] if n==2: return max(nums[0],nums[1]) #[1,2,3,2] #2 plans rob [1,2,3] and [2,3,2], select plan with more money #1,2,...n-1 #0,1,...,n-2 left=right=temp=0 for i in range(1,len(nums)): #dp(i): largest money robber can get between left most house and house i #dp(i)=max(dp(i-2)+nums[i],dp(i-1)) #left=dp(i-2), right=dp(i-1) temp=max(nums[i]+left,right) left=right right=temp robber1=right left=right=temp=0 for i in range(0,len(nums)-1): temp=max(nums[i]+left,right) left=right right=temp robber2=right return max(robber1,robber2) #Time complexity: O(n) #Space complexity: O(1)
Time Complexity: O(n)
Space Complexity: O(1)
Feeling tired? You can also try our free online no-installation required casual games: Here Please consider to follow my youtube channel to support me: