198 House robber

https://leetcode.com/problems/house-robber/

O(n)解法有点类似链表?你维护分别一个prev和cur node,把他们往右移动。maxPrev是[0,i-1]的最大值(不一定取nums[i-1]),max是[0,i]的最大值(不一定取nums[i])。那么当前的最大利益要么是rob i+1:max[0, i-1]+nums[i+1],要么是不rob i+1: max[0, i]。之后滚动更新这两个值

class Solution {
    public int rob(int[] nums) {
        int maxPrev = 0;
        int max = nums[0];
        for (int i = 1; i < nums.length; i++) {
            int current = Math.max(max, maxPrev+nums[i]);
            maxPrev = max;
            max = current;
        }
        return max;
    }
}

Last updated