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.數組的數據應該是怎樣的: