美文网首页
[198] House Robber

[198] House Robber

作者: 菜鸟learn编程 | 来源:发表于2018-09-14 22:29 被阅读0次
    \\代码来自讨论区的网友
    \\source: https://leetcode.com/problems/house-robber/discuss/156523/From-good-to-great.-How-to-approach-most-of-DP-problems.
    public int rob(int[] nums) {
      if(nums.length==0)
        return 0;
      int prev1 = 0;
      int prev2 = 0;
      for(int num: nums) {
        int tmp = prev1; \\对下一个元素记录其从 0 到前两个数组元素的和的最大值
        prev1 = Math.max(prev2 + num, prev1);
        prev2 = temp;
      }
    }
    
    • 解题思路:
      • 这是一个动态规划的问题,解题的限制是数组中相邻的两个元素不能同时访问。每次判断,对当前的数组元素 nums[i] 是否选取,如果选取 nums[i],那么当前数组元素的前一个元素 nums[i-1] 肯定不会被选择,即到当前数组元素前两个元素的和的最大值加上当前的数组元素的值 prev2 + num[i];如果不选取 nums[i],那么值为到当前数组元素前一个元素的和的最大值。取这两种情况下的最大值作为当前数组元素的值。
      • 由于题目中所只需要得到按照哪种方式选择数组元素可以得到最大值,所以每次对每一个元素 nums[i],只需要保存 prev2 (在 0 到 i-2 中选取元素得到和的最大值)和 prev1(在 0 到 i-1 中选取元素得到和的最大值)。

    相关文章

      网友评论

          本文标题:[198] House Robber

          本文链接:https://www.haomeiwen.com/subject/svvagftx.html