198. House Robber
class Solution {
public:
int rob(vector<int>& nums)
{
int n = nums.size();
if (n == 1) return nums[0];
vector<int> dp(n);
dp[0] = nums[0];
dp[1] = max(nums[0], nums[1]);
for (int i = 2; i < n; ++i)
{
dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]);
}
return dp.back();
}
};
- T:
- S:
DP Improved
class Solution {
public:
int rob(vector<int>& nums)
{
int n = nums.size();
if (n == 1) return nums[0];
int prevPrevMax = nums[0];
int prevMax = max(nums[0], nums[1]);
int currentMax = 0;
for (int i = 2; i < n; ++i)
{
currentMax = max(prevMax, prevPrevMax + nums[i]);
prevPrevMax = prevMax;
prevMax = currentMax;
}
return prevMax;
}
};
- T:
- S: