打家劫舍
涉及知识:动态规划
分析:
题目中的例子:2 7 9 3 1
2 | 7 | 9 | 3 | 1 | |
---|---|---|---|---|---|
拿 | 2 | 7 | 11 | 10 | 12 |
不拿 | 0 | 2 | 7 | 11 | 10 |
设 dp[k] 表示 k 个元素所能打劫的最大值。
则状态转移方程 dp[k] = max(dp[k-2] + cur,dp[k-1])
dp[k-2] + cur:表示不拿第 k-1 个元素,当前元素 + (前(k-2)个元素所能达到的最大值)。
dp[k-1] :表示 k-1 个元素所能打劫的最大值。
代码:
class Solution {
public int rob(int[] nums) {
if(nums.length == 0){
return 0;
}
int take = 0, noTake = 0;
int tmp = 0;
for(int i = 0; i < nums.length; ++i){
tmp = noTake + nums[i];
noTake = Math.max(take, noTake);
take = tmp;
}
return Math.max(take, noTake);
}
}