剑指 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; } }