classSolution{public:introb(vector<int>& nums){int len = nums.size();if(len ==0)return0;if(len ==1)return nums[0];if(len ==2)returnmax(nums[0], nums[1]);// res = max(不偷第一家,不偷最后一家));returnmax(helper(nums,0, len -2),helper(nums,1, len -1));}private:inthelper(const vector<int>& nums,int start,int end){int first = nums[start];int second =max(nums[start], nums[start +1]);for(int i = start +2; i <= end; i++){int temp =max(second, first + nums[i]);
first = second;
second = temp;}return second;}};