class Solution {
public:
int rob(vector<int>& nums) {
int len=nums.size();
if(len==0) return 0;
if(len==1) return nums[0];
if(len==2) return max(nums[0],nums[1]);
return max(robhouse(nums,0,len-2),robhouse(nums,1,len-1)); //两趟动规;
//抢第一家店到倒数第二家, 抢第二家店到最后一家;
}
int robhouse(vector<int> nums,int x,int y) //一定要把nums引用去掉;
{
nums[x+1]=max(nums[x],nums[x+1]); //第一个不要忘了;
for(int i=x+2;i<=y;i++)
{
nums[i]=max(nums[i-1],nums[i-2]+nums[i]);
}
return nums[y];
}
};
public:
int rob(vector<int>& nums) {
int len=nums.size();
if(len==0) return 0;
if(len==1) return nums[0];
if(len==2) return max(nums[0],nums[1]);
return max(robhouse(nums,0,len-2),robhouse(nums,1,len-1)); //两趟动规;
//抢第一家店到倒数第二家, 抢第二家店到最后一家;
}
int robhouse(vector<int> nums,int x,int y) //一定要把nums引用去掉;
{
nums[x+1]=max(nums[x],nums[x+1]); //第一个不要忘了;
for(int i=x+2;i<=y;i++)
{
nums[i]=max(nums[i-1],nums[i-2]+nums[i]);
}
return nums[y];
}
};