题解 | #打家劫舍(二)#

打家劫舍(二)

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);
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务