Description Link to heading
Solution Link to heading
dp[i] denotes the maximum amount when the first i houses are considered.
Let’s consider the recursive relationship:
- If the
i-th house was stolen, it means that thei - 1th house was not stolen, sodp[i] = dp[i - 2] + a[i - 1]. - If the
i-th house was not stolen, thendp[i] = dp[i - 1].
So, dp[i] = max(dp[i - 2] + nums[i - 1], dp[i - 1]).
Code Link to heading
#include <vector>
using std::vector;
class Solution {
private:
int max(int a, int b) {
return a > b ? a : b;
}
public:
int rob(vector<int> &nums) {
vector<int> dp(nums.size() + 1, 0);
if (nums.size() == 1)
return nums[0];
if (nums.size() == 2)
return nums[0] > nums[1] ? nums[0] : nums[1];
dp[1] = nums[0];
for (int i = 2; i <= nums.size(); i++) {
dp[i] = max(dp[i - 2] + nums[i - 1], dp[i - 1]);
}
return dp[nums.size()];
}
};