198. 打家劫舍
题目链接:https://leetcode.cn/problems/house-robber/
文章讲解:https://programmercarl.com/0198.打家劫舍.html
题目难度:中等
视频讲解:https://www.bilibili.com/video/BV1Te411N7SX
题目状态:有点思路但不全。
思路:
这次的dp[i]数组表示在到第i个房间中时最多的偷盗金额,而到第i个房间的时候,我们有两个策略,①偷这一家;②不偷这一家。
① 偷这一家,那么我们就不能偷前一家了(i-1),因此此时的金额数量为dp[i - 2] + nums[i];
② 不偷这一家,那么我们就按照之前的策略了,也就是dp[i - 1]的金额。
因此我们的递归dp公式就出来了:dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);
所以我们要初始化两个数,
- dp[0] = 0
- dp[1] = max(nums[0], nums[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];
}
};
213. 打家劫舍 II
题目链接:https://leetcode.cn/problems/house-robber-ii/
标签:right,return,nums,int,随想录,第三十四,part7,dp,left From: https://www.cnblogs.com/frontpen/p/18351952
文章讲解:https://programmercarl.com/0213.打家劫舍II.html
题目难度:中等
视频讲解:https://www.bilibili.com/video/BV1oM411B7xq
题目状态: