涉及知识:动态规划
分析:
题目中的例子: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); } }