这是一道动态规划题目,动态规划的核心是:状态和转态转移方程。
//方法一:
//Time:O(n),Space:O(n)
class Solution
{
public:
int max(int a,int b)
{
return a>b?a:b;
}
int rob(vector<int>& nums)
{
if(nums.size()==0) return 0;
if(nums.size()==1) return nums[0];
vector<int> ret(nums.size());
ret[0]=nums[0];
ret[1]=max(nums[0],nums[1]);
for(int i=2;i<nums.size();i++)
{
ret[i]=max(ret[i-1],ret[i-2]+nums[i]);
}
return ret[nums.size()-1];
}
};
//方法二:
//Time:O(n) Space:O(1)
class Solution
{
public:
int max(int a,int b)
{
return a>b?a:b;
}
int rob(vector<int>& nums)
{
if(nums.size()==0) return 0;
if(nums.size()==1) return nums[0];
int pre2=nums[0];
int pre1=max(nums[0],nums[1]);
for(int i=2;i<nums.size();i++)
{
int current=max(pre1,pre2+nums[i]);
pre2=pre1;
pre1=current;
}
return pre1;
}
};