LeetCode 213: House Robber II (my dynamic programming solution)

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: