1、题目描述
小偷偷东西,邻居是一个圈,不能偷相邻两家的。问最多可以偷多少钱。
2、思路
利用robber I的函数,返回偷第0 — n-2家 和偷 1—n-1家的最大值。也就是说0和n-1家是不能同时被偷的。
3、代码
int rob(vector<int>& nums) {
int n = nums.size();
if(n==0) return 0;
if(n==1) return nums[0];
else
return max(rob1(nums,0,n-2),rob1(nums,1,n-1));
}
int rob1(vector<int>& nums,int l,int r) {
if(l==r) return nums[l];
int pre = 0, curr=0;
for(int i=l;i<=r;i++){
int t = max(pre+nums[i],curr);
pre = curr;
curr = t;
}
return curr;
}