213. House Robber II - cocoder39/coco39_LC GitHub Wiki

213. House Robber II

int rob(vector<int>& nums) {
        int sz = nums.size();
        if(sz == 0){
            return 0;
        }
        if(sz == 1){
            return nums[0];
        }
        vector<int> rob_unrob0(sz);   // max can get if rob   nums[i] && unrob nums[0] 
        vector<int> rob_rob0(sz);   // max can get if rob   nums[i] && rob   nums[0]
        vector<int> unrob_unrob0(sz); // max can get if unrob nums[i] && unrob nums[0]
        vector<int> unrob_rob0(sz); // max can get if unrob nums[i] && rob   nums[0]
        
        rob_rob0[0] = nums[0];
        rob_unrob0[0] = 0;
        unrob_rob0[0] = 0; //not nums[0]
        unrob_unrob0[0] = 0;
        for (int i = 1; i < sz; i++) {
            if (i != sz - 1) { //last one
                rob_rob0[i] = unrob_rob0[i-1] + nums[i];
            }
            rob_unrob0[i] = unrob_unrob0[i-1] + nums[i];
            unrob_rob0[i] = max(rob_rob0[i-1], unrob_rob0[i-1]);
            unrob_unrob0[i] = max(rob_unrob0[i-1], unrob_unrob0[i-1]);
        }
        return max(rob_unrob0[sz-1], max(unrob_unrob0[sz-1], unrob_rob0[sz-1]));
    }
int rob(vector<int>& nums) {
        int sz = nums.size();
        if(sz == 0){
            return 0;
        }
        if(sz == 1){
            return nums[0];
        }
        
        int rob_rob0 = nums[0];
        int rob_unrob0 = 0;
        int unrob_rob0 = 0; //not nums[0]
        int unrob_unrob0 = 0;
        for (int i = 1; i < sz; i++) {
            int rr = rob_rob0;
            int ru = rob_unrob0;
            int ur = unrob_rob0; 
            int uu = unrob_unrob0;
            if (i != sz - 1) { //last one
                rob_rob0 = ur + nums[i];
            }
            rob_unrob0 = uu + nums[i];
            unrob_rob0 = max(rr, ur);
            unrob_unrob0 = max(ru, uu);
        }
        return max(rob_unrob0, max(unrob_unrob0, unrob_rob0));
    }

there is another two pass solution where a helper() returns the max can get from a range of nums, thus the final result is max(helper(0, sz - 2), helper(1, sz - 1))

⚠️ **GitHub.com Fallback** ⚠️