题解 | #打家劫舍(二)#
打家劫舍(二)
https://www.nowcoder.com/practice/a5c127769dd74a63ada7bff37d9c5815
#include <algorithm>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int rob(vector<int>& nums) {
// write code here
// 第一个房间和最后一个房间是相邻的
int Asize = nums.size();
if(Asize == 0){
return 0;
}
if(Asize == 1){
return nums[0];
}
if(Asize == 2){
return max(nums[0], nums[1]);
}
vector<int> Alist(nums.begin(), nums.end()-1);
vector<int> Blist(nums.begin()+1, nums.end());
int Bsize = Asize-1;
vector<int> value1(Bsize, 0);
vector<int> value2(Bsize, 0);
value1[0] = Alist[0];
value1[1] = Alist[1];
for(int i = 2; i<=Bsize-1; i++){
value1[i] = max(value1[i-1], value1[i-2]+Alist[i]);
cout<<value1[i-1]<<","<<value1[i-2]+Alist[i]<<endl;
}
int Amax = *max_element(value1.begin(), value1.end());
cout<<"Amax"<<Amax<<endl;
value2[0] = Blist[0];
value2[1] = Blist[1];
for(int i = 2; i<=Bsize-1; i++){
value2[i] = max(value2[i-1], value2[i-2]+Blist[i]);
cout<<value2[i-1]<<","<<value2[i-2]+Alist[i]<<endl;
}
int Bmax = *max_element(value2.begin(), value2.end());
cout<<"Bmax"<<Bmax<<endl;
return max(Amax, Bmax);
}
};
