代码随想录算法【Day39】
Day39
198.打家劫舍
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]; } };
五部曲
1.dp数组及下标定义:dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]。
2.递推公式:dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);
3.初始化:dp[0] 一定是 nums[0],dp[1] = max(nums[0], nums[1]);
4.遍历顺序:dp[i] 是根据dp[i - 2] 和 dp[i - 1] 推导出来的,那么一定是从前到后遍历!
5.数组的数据应该是怎样的: