题解 | #打家劫舍(二)#
打家劫舍(二)
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); } };