zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    LeetCode(1): 两数之和
    LeetCode(2): 两数相加
    目标检测
    图像语义分割
    Python的图像库
    Caffe
    Layers Of Caffe
    Solver Of Caffe
    ORA-01144_表空间数据文件超出最大限制
    ORA-01654_TableSpace空间不足问题处理
  • 原文地址:https://www.cnblogs.com/skillking/p/9886140.html
Copyright © 2011-2022 走看看