(1)排除相邻,两次遍历
class Solution {
public:
int helper(vector<int>& nums,int left,int right) {
int a=nums[left],b=max(nums[left],nums[left+1]);
for(int i=left+2;i<=right;i++) {
int temp=b;
b=max(b,a+nums[i]);
a=temp;
}
return b;
}
int rob(vector<int>& nums) {
if(nums.size()==1) return nums[0];
if(nums.size()==2) return max(nums[0],nums[1]);
int n=nums.size();
return max(helper(nums,0,n-2),helper(nums,1,n-1));
}
};