198. House Robber
题目描述
不相邻的最大和
前置知识
动态规化
官方思路
本质上在解决对于第 [i] 个房子,我们抢还是不抢的问题。
状态转移方程 dp[i] = Math.max(dp[i - 2] + nums[i - 2], dp[i - 1]);
注:这里为了方便计算,令 dp[0]和 dp[1]都等于 0,所以 dp[i]对应的是 nums[i - 2])
将空间复杂度优化:只需要用到dp[i-1]和dp[i-2],不用保存所有历史信息。
代码
class Solution {
public:
int rob(vector<int>& nums) {
int a=0,b=0;//分别记录了dp[i-2]和dp[i-1]
for (int i=0;i<nums.size();++i){
int temp=b;
b=max(a+nums[i],b);
a=temp;
}
return b;
}
};