此题是计算偷马贼至少隔一个马厩偷马最多能得到多大价值
思路一:采用搜索比较所有方案的价值
算法时间复杂度太大,未通过所有测试用例
class Solution {
public:
int rob(vector<int>& nums) {
int len=nums.size();
if(len==0)
return 0;
if(len==1)
return nums[0];
vector<int> first_vector;
if(len>2)
first_vector=vector<int>(nums.begin()+2,nums.end());
vector<int> second_vector;
if(len>3)
second_vector=vector<int>(nums.begin()+3,nums.end());
int first=nums[0]+rob(first_vector);
int second=nums[1]+rob(second_vector);
int result=first>second?first:second;
return result;
}
};
思路二:动态规划
class Solution {
public:
int rob(vector<int>& nums) {
int len=nums.size();
if(len==0)
return 0;
if(len==1)
return nums[0];
int * dp=new int[len];
dp[0]=nums[0];
dp[1]=max(nums[0],nums[1]);
for(int i=2;i<len;i++)
dp[i]=max(dp[i-1],dp[i-2]+nums[i]);
return dp[len-1];
}
};