思路
- 假设dp[i]为到第i个房间偷窃的最大值,那么有dp[i] = max{dp[i-1],dp[i-2] + nums[i]}
- 注意i在数组的索引为 i % 2
class Solution {
public int rob(int[] nums) {
if (nums.length < 2)
return nums[0];
int[] dp = new int[]{nums[0], Math.max(nums[0], nums[1])};
for (int i = 2; i < nums.length; i++) {
dp[i % 2] = Math.max(dp[(i - 1) % 2], dp[(i - 2) % 2] + nums[i]);
}
return dp[(nums.length - 1) % 2];
}
}