🧩Algo 动态规划
198. 打家劫舍
难度:🟡 Medium | 标签:动归 | 状态:⬜ LeetCode 链接
思路
dp[i] = max(dp[i-1], dp[i-2] + nums[i]):
- 不偷 i:继承
dp[i-1] - 偷 i:
dp[i-2] + nums[i]
代码
class Solution {
public:
int rob(vector<int>& nums) {
int prev2 = 0, prev1 = 0;
for (int x : nums) {
int cur = max(prev1, prev2 + x);
prev2 = prev1;
prev1 = cur;
}
return prev1;
}
};
复杂度
- 时间 O(n),空间 O(1)
易错 / 回顾
- 滚动两变量 prev1 / prev2
- 213(环形打家劫舍):拆成两段——「偷第一家」和「不偷第一家」各跑一次
- 337(树形打家劫舍):树形 DP
Related · 动态规划