
Sponsored
Sponsored
This approach involves splitting the problem into two scenarios: robbing from house 0 to house n-2, and from house 1 to house n-1. The aim is to apply the linear version of the House Robber problem to each scenario separately and then take the maximum of the two resulting summed values.
Time Complexity: O(n).
Space Complexity: O(1).
1
2def robLinear(nums):
3 prev1, prev2 = 0, 0
4 for num in nums:
5 temp = prev1
6 prev1 = max(num + prev2, prev1)
7 prev2 = temp
8 return prev1
9
10class Solution:
11 def rob(self, nums):
12 if len(nums) == 1:
13 return nums[0]
14 return max(robLinear(nums[:-1]), robLinear(nums[1:]))
15This Python solution utilizes a helper function robLinear to handle the linear robbery problem. It then applies this helper to the range excluding first and last houses respectively, returning the greatest result.
This approach implements a memoized version of the dynamic programming solution to avoid recomputing values. We explore two scenarios of the circle, taking into account the cycles explicitly by caching intermediate results.
Time Complexity: O(n).
Space Complexity: O(n) for the memoization array.
1
2
This JavaScript solution applies memoization utilizing plain objects to store precomputed solutions. The function robHelper determines the best regular house rob outcomes recursively while updating cache objects accordingly for each scenario considered.