public int rob (int[] nums) {
if(nums.length == 1)return nums[0];
//dp1[i]表示偷了第一家,并且有i-1家可偷时获得的最大收益
int []dp1 = new int[nums.length+1];
//dp2[i]表示偷了第二家,并且有i-1家可偷时获得的最大收益
int []dp2 = new int[nums.length+1];
//dp1[1]先偷第一家
dp1[1] = nums[0];
//dp2[2]先偷第二家
dp2[2] = nums[1];
for(int i = 3;i<=nums.length;i++){
dp1[i] = Math.max(dp1[i-1],dp1[i-2]+nums[i-1]);
dp2[i] = Math.max(dp2[i-1],dp2[i-2]+nums[i-1]);
}
//偷第一家时dp1[nums.length-1]表示最大值,
//偷第二家时dp2[nums.length]表示最大值
return Math.max(dp1[nums.length-1],dp2[nums.length]);
}