动态规划+分情况讨论
class Solution {
public int rob(int[] nums) {
if(nums.length==0)
return 0;
if(nums.length==1)
return nums[0];
int dp1[]=new int[nums.length];
dp1[0]=nums[0];
dp1[1]=Math.max(nums[1],nums[0]);
int maxres1=dp1[1];
for(int i=2;i<nums.length-1;i++){
dp1[i]=Math.max(dp1[i-1],dp1[i-2]+nums[i]);
maxres1=Math.max(dp1[i],maxres1);
}
int dp2[]=new int[nums.length];
dp2[0]=0;
dp2[1]=nums[1];
int maxres2=dp2[1];
for(int i=2;i<nums.length;i++){
dp2[i]=Math.max(dp2[i-1],dp2[i-2]+nums[i]);
maxres2=Math.max(dp2[i],maxres2);
}
return Math.max(maxres1,maxres2);
}
}