题解 | #打家劫舍(二)#
打家劫舍(二)
https://www.nowcoder.com/practice/a5c127769dd74a63ada7bff37d9c5815
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int rob(vector<int>& nums) { int length = nums.size(); if (length == 1) return nums[0]; vector<vector<int>> dp(length, vector<int>(2, 0)); // 情况1:第一家偷 dp[1][0] = nums[0], dp[1][1] = nums[0]; // 第二家不能偷 for (int i = 2; i < length - 1; i++) { dp[i][0] = max(dp[i-1][0], dp[i-1][1]); dp[i][1] = dp[i-1][0] + nums[i]; } int ans1 = max(dp[length-2][0], dp[length-2][1]); // 倒数第二家 // 情况2:第一家不偷 dp[1][0] = 0, dp[1][1] = nums[1]; // 第二家可偷可不偷 for (int i = 2; i < length; i++) { dp[i][0] = max(dp[i-1][0], dp[i-1][1]); dp[i][1] = dp[i-1][0] + nums[i]; } int ans2 = max(dp[length-1][0], dp[length-1][1]); // 倒数第一家 return max(ans1, ans2); } };