思路都在注释
自己写的
class Solution {
public:
int rob(vector<int>& nums) {
if (nums.size() == 1) return nums[0];
if (nums.size() == 2) return max(nums[0], nums[1]);
int dp[(int)nums.size()];
memset(dp, 0, sizeof(dp));
dp[0] = nums[0], dp[1] = max(nums[0], nums[1]);
for (int i = 2; i < nums.size(); i++) {
dp[i] = max(nums[i] + dp[i - 2], dp[i - 1]);
}
return dp[(int)nums.size() - 1];
}
};
简化版
class Solution {
public:
int rob(vector<int>& nums) {
vector <int> dp(nums.size() + 1, 0);
dp[1] = nums[0];
for (int i = 1; i < nums.size(); i++) {
dp[i + 1] = max(dp[i], dp[i - 1] + nums[i]);
}
return dp[nums.size()];
}
};