法一:每次把当前位前一位的值和当前位加 res[i-2]的值比较,取最大赋值给当前位,遍历完成最后一位即为最大
long long houseRobber(vector<int> A) {
// write your code here
vector<long long> res(A.size(),0);
res[0]=A[0];
res[1]=max(A[0],A[1]);
for(int i=2;i<A.size();i++)
{
res[i]=max(res[i-2]+A[i],res[i-1]);
}
return res[res.size()-1];
}
法二:道理同法一,只不过是用了一个dp为3的容器实现这个过程
long long houseRobber(vector<int> A) {
// write your code here
int n = A.size();
if(n==0)
return 0;
long long ret = A[0];
vector<long long> dp(3,0);
for(int i=0;i<n;i++)
{
long long temp = 0;
for(int j=0;j<2;j++)
{
temp = max(temp,dp[j]+A[i]);
}
ret = max(ret,temp);
dp.push_back(temp);
dp.erase(dp.begin());
}
return ret;
}