剑指 Offer II 090. 环形房屋偷盗(213. 打家劫舍 II)

题目:

 

 

 

思路:

【0】这道题算是 剑指 Offer II 089. 房屋偷盗(198. 打家劫舍) 的变种,增加了环形的设计。

【1】动态规划的方式

代码展示:

动态规划的方式:

//时间0 ms击败100%
//内存38.8 MB击败72.14%
class Solution {
    public int rob(int[] nums) {
        int length = nums.length;
        if (length == 1) {
            return nums[0];
        } else if (length == 2) {
            return Math.max(nums[0], nums[1]);
        }
        // 由于存在环的概念,所以为了打破环的话,要么就是头不要,要么就是尾不要,那么缺一个的位置自然就没有环了
        // 首先明确,头尾相连,那么必然是只能2选一,或者两个都不选,如【1,9,8,9,1】,这种就是标准的两个都不选。
        // 那么两个都不选的情况下,截取任意一个不要都不影响最大值,
        // 其次是如果是二选一的情况,那么就考虑截取掉头或者截取掉尾,然后两种情况的最大值哪个更大拿哪个。
        return Math.max(robRange(nums, 0, length - 2), robRange(nums, 1, length - 1));
    }

    //这个便就是原版的处理方式进行了变动,根据传入的左右边距,将数组截取形成新的数组
    public int robRange(int[] nums, int start, int end) {
        int first = nums[start], second = Math.max(nums[start], nums[start + 1]);
        for (int i = start + 2; i <= end; i++) {
            int temp = second;
            second = Math.max(first + nums[i], second);
            first = temp;
        }
        return second;
    }
}

 

posted @ 2023-03-31 16:24  忧愁的chafry  阅读(41)  评论(0编辑  收藏  举报