213. House Robber II

一、题目

  1、审题

  

  2、分析

    一个连续的数组,你能获取不连续的元素值代表的财富,数组首尾的两个元素算作连续,求能获得的最大财富值。

二、解答

  1、思路:

    在 198. House Robber 的基础上添加了首尾不能连续的条件。

    故,可以采用破坏圈的方法,即获取的元素范围为 [0, len - 2] 或者 [1, len -1],求这两个的最大值即可。

 1     public int rob(int[] nums) {
 2         int len = nums.length;
 3         if(len == 1)
 4             return nums[0];
 5         return Math.max(helper(nums, 0, len - 2), helper(nums, 1, len - 1));
 6     }
 7     public int helper(int[] nums, int start, int end) {
 8         int curYes = 0;    // 当前的获取
 9         int curNo = 0;    // 当前的不获取
10         for (int i = start; i <= end; i++) {
11             int preNo = curNo, preYes = curYes;
12             curNo = Math.max(preNo, preYes);
13             curYes = preNo + nums[i];
14         }
15         return Math.max(curNo, curYes);
16     }
原文地址:https://www.cnblogs.com/skillking/p/9886140.html