import java.util.*;
public class Solution {
//如果0位置偷,在2-n-2的区域内与打家劫舍1相同 =》nums[0] ,rob1(2,n-2)
//如果0位置不偷,就是1-n-1位置进行打家劫舍1. =>
//rob1(1,n-1);
// f[i] 表示偷的最大金额,g[i] 表示不偷的最大金额
public int rob (int[] nums) {
int n = nums.length;
return Math.max(nums[0] + rob1(nums,2,n-2),rob1(nums,1,n-1));
}
//与打家劫舍1逻辑一致
public int rob1(int[]nums,int start,int end){
if(start>end) return 0;
int n = nums.length;
int[] f= new int [n];
int[] g = new int [n];
//1.初始化
f[start] = nums[start];
//2.填表:只用start -end
for(int i =start +1;i<=end; i++){
f[i] = nums[i] +g[i-1];
g[i] = Math.max(g[i-1],f[i-1]);
}
return Math.max(f[end],g[end]);
}
}