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]);
    }