House Robber II

numsArray
[1, 2, 3, 1]
1def rob(nums):
2    if len(nums) == 1:
3        return nums[0]
4
5    # Case 1: Rob houses 0 to n-2
6    dp = [0] * (len(nums) - 1)
7    dp[0] = nums[0]
8    dp[1] = max(nums[0], nums[1])
9
10    for i in range(2, len(dp)):
11        rob = dp[i - 2] + nums[i]
12        not_rob = dp[i - 1]
13        dp[i] = max(rob, not_rob)
14
15    case_1_max = dp[-1]
16
17    # Case 2: Rob houses 1 to n-1
18    dp = [0] * (len(nums) - 1)
19    dp[0] = nums[1]
20    dp[1] = max(nums[1], nums[2])
21
22    for i in range(2, len(dp)):
23        rob = dp[i - 2] + nums[i + 1]
24        not_rob = dp[i - 1]
25        dp[i] = max(rob, not_rob)
26
27    case_2_max = dp[-1]
28
29    return max(case_1_max, case_2_max)
0 / 9
houses1231dp