问题描述
https://leetcode-cn.com/problems/house-robber/
思路
定义 dp[i] 为当小偷洗劫了第 i 家的情况下,他能偷窃到的最大金额。定义 money[0] 为截止到第 i-2 户人家,小偷得到的最大盗窃金额,money[1] 为截至第 i-1 户人家的情况。定义 robmax 为他走过第 i-1 家之后,能偷窃到的最大金额。偷窃了第i家就不能偷窃第i-1家,所以 robmax = max(robmax, money[0]+nums[i])。遍历数组,最后的 robmax 即为结果。只记录 money[0]、money[1] 实现了空间复杂度的最小化。
实现
class Solution {
public:
int rob(vector<int>& nums) {
int num = nums.size();
int money[2]={0,0}, maxrob=0;
for(int i=2; i<num+2; i++)
{
maxrob = max(maxrob, money[0]+nums[i-2]);
money[0]=money[1];
money[1]=maxrob;
}
return maxrob;
}
};