LeetCode213. 打家劫舍 II

思路:与198题的区别是,本题的房子时环形的,即首位连接。

  首先,首尾房间不能同时被抢,那么只可能有三种不同情况:要么都不被抢;要么第一间房子被抢最后一间不抢;要么最后一间房子被抢第一间不抢。

  但是,只需要考虑情况二和情况三,取两种情况最大的即可。

  因为,在计算这两种情况时,已经把都不抢的情况考虑到了。

因此,把原始数组分成 去头  和 去尾 两个队列的数据。

class Solution {
    public int rob(int[] nums) {
        int n = nums.length;
        if (n == 0) return 0;
        if (n == 1) return nums[0];
//        return Math.max(myRob(Arrays.copyOfRange(nums,0,n-1)),
//                        myRob(Arrays.copyOfRange(nums,1,n)));
        return Math.max(myRob1(nums, 0, n-2),
                        myRob1(nums,1,n-1));
    }
    private int myRob(int[] nums) {
        int a = 0, b = 0;
        for (int i = 0; i < nums.length; i++) {
            int temp = Math.max(nums[i] + a, b);
            a = b;
            b = temp;
        }
        return b;
    }
    private int myRob1(int[] nums, int start, int end) {
        int a = 0, b = 0;
        for (int i = start; i <= end; i++) {
            int temp = Math.max(nums[i] + a, b);
            a = b;
            b = temp;
        }
        return b;
    }
}

 

posted @ 2021-01-02 17:44  不学无墅_NKer  阅读(66)  评论(0编辑  收藏  举报