public int rob(int[] nums) {
if(nums==null||nums.length==0)
return 0;
if(nums.length==1){
return nums[0];
}
int temp = nums[0];
nums[0] = 0;
int a = helper(nums);
nums[0] = temp;
nums[nums.length - 1] = 0;
int b = helper(nums);
return Math.max(a, b);
}
public int helper(int[] nums) {
int[] dp = new int[nums.length];
dp[0]=nums[0];
dp[1]=Math.max(nums[0], nums[1]);
for(int i=2; i<nums.length; i++){
dp[i] = Math.max(dp[i-2]+nums[i], dp[i-1]);
}
return dp[nums.length-1];
}