public int rob (int[] nums) { // write code here if(nums.length==1) return nums[0]; int n=nums.length; // 最后一家不能偷 int[] dp1=new int[n]; dp1[1]=nums[0]; for(int i=2;i<n;i++){ dp1[i]=Math.max(dp1[i-2]+nums[i-1],dp1[i-1]); } //第一家不能偷 int[] dp2=new int[n]; dp2[1]=nums[1]; for(int i=2;i<n;i++){ dp2[i]=Math.max(dp2[i-2]+nums[i],dp2[i-1]); } return Math.max(dp1[n-1],dp2[n-1]); }