198. House Robber

我的心好痛,有点可怜自己了,骗子啊。。好伤心。。。。为什么要骗我。

你说,霞染天光,陌上花开与谁享;后来,烟笼柳暗,湖心水动影无双。

dp[i] = Math.max(dp[i-1], dp[i-2] + nums[i]);

public class Solution {
    public int rob(int[] nums) {
        if (nums.length == 0) return 0;
        if (nums.length == 1) return nums[0];
        
        int res = 0;
        int prev = nums[0];
        int temp = nums[1];
        for (int i = 2; i < nums.length; i++) {
            int rec = temp;
            temp = Math.max(prev + nums[i], temp);
            prev = rec;
        }
        return temp;
    }
}


三刷了吧。。。感觉这个题研究好多次了。

一个神奇的思路是。
dp[i % 2]表示今天。
dp[(i-1) % 2]昨天。
dp[(i-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[] dp = new int[2];
        
        for (int i = 2; i < nums.length; i++) {
            int current = dp[(i-2)%2] + nums[i];
            int yesterday = dp[(i-1)%2];
            dp[i%2] = Math.max(current, yesterday);
        }
        return dp[(dp.length-1) % 2];
    }
}
原文地址:https://www.cnblogs.com/reboot329/p/6127897.html