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