zoukankan      html  css  js  c++  java
  • 213. House Robber II

    好像是二刷。

    题干改变的一点就是现在所有房子成环了,首尾相连。

    现在没法用动态规划来dp[n] 来做了,因为第(n-1)个房子和第1个房子是相连的。

    假如我们第一个房子不抢,从n = 1开始,那么剩下的总共n - 1个房子和第一题一样,因为最后一个房子此时就算选了也不和n=0(第一个)重合。

    假如我们第一个房子抢,那就只能抢到第n-2个房子,因为就算第一个抢了,也不会影响第n-1个。

    就这2种情况。

    做的时候用start标记从0还是1开始抢。

    Time: O(n)

    有些Edge cases需要注意,一个是数组运算到的总数是n-2,因为我们现在2种情况要么不抢第一个,要么不抢最后一个,所以会比上轮上一个

    public class Solution {
        public int rob(int[] nums) {
            if (nums.length == 0) return 0;
            if (nums.length == 1) return nums[0];
            if (nums.length == 2) return Math.max(nums[0], nums[1]);
            
            int sol1 = helper(0, nums);
            int sol2 = helper(1, nums);
            return Math.max(sol1, sol2);
        }
        
        public int helper(int start, int[] nums) {
            int[] dp = new int[2];
            dp[0] = nums[start];
            dp[1] = Math.max(nums[start], nums[start + 1]);
            
            for (int i = 2; i < nums.length - 1; i++) {
                dp[i % 2] = Math.max(dp[(i-1)%2], dp[(i-2)%2] + nums[i + start]);
            }
            
            return dp[(nums.length - 2) % 2];
        }
    }
    
  • 相关阅读:
    平板涂色
    速算游戏_NOI导刊2011提高(04)
    信息学奥赛一本通——配套刷题网站
    求10000以内n的阶乘
    大整数的因子
    计算2的N次方
    大整数加法
    带余除法
    A/B 高精度
    A*B 高静度
  • 原文地址:https://www.cnblogs.com/reboot329/p/6127928.html
Copyright © 2011-2022 走看看