AlgoMaster Logo

House Robber II

nums=[1, 2, 3, 1]
1public int rob(int[] nums) {
2    if (nums.length == 1) {
3        return nums[0];
4    }
5
6    // Case 1: Rob houses 0 to n-2
7    int[] dp = new int[nums.length - 1];
8    dp[0] = nums[0];
9    dp[1] = Math.max(nums[0], nums[1]);
10
11    for (int i = 2; i < dp.length; i++) {
12        int rob = dp[i - 2] + nums[i];
13        int notRob = dp[i - 1];
14        dp[i] = Math.max(rob, notRob);
15    }
16
17    int case1Max = dp[dp.length - 1];
18
19    // Case 2: Rob houses 1 to n-1
20    dp = new int[nums.length - 1];
21    dp[0] = nums[1];
22    dp[1] = Math.max(nums[1], nums[2]);
23
24    for (int i = 2; i < dp.length; i++) {
25        int rob = dp[i - 2] + nums[i + 1];
26        int notRob = dp[i - 1];
27        dp[i] = Math.max(rob, notRob);
28    }
29
30    int case2Max = dp[dp.length - 1];
31
32    return Math.max(case1Max, case2Max);
33}
0 / 9
houses1231dp