198. 打家劫舍
- dp[i],虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]。
- 确定递推公式:
- dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])
- 初始化:
- dp[0] = nums[0];
- dp[1] = max(nums[0], nums[1]);
- 确定遍历顺序
dp[i] 是根据dp[i - 2] 和 dp[i - 1] 推导出来的,那么一定是从前到后遍历!
class Solution {
public:
int rob(vector<int>& nums) {
if (nums.size() == 0) return 0;
if (nums.size() == 1) return nums[0];
vector<int> dp(nums.size());
dp[0] = nums[0];
dp[1] = max(nums[0], nums[1]);
for (int i = 2; i < nums.size(); i++) {
dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);
}
return dp[nums.size() - 1];
}
};