Untitled

 avatar
unknown
c_cpp
a month ago
1.7 kB
3
Indexable
class Solution {
public:
    vector<int> maxSumOfThreeSubarrays(vector<int>& nums, int k) {
        int numsSize= nums.size();

        vector<int> sums;
        int currentSum=0;
        for(int i=0;i<k;i++){
            currentSum+= nums[i];
        }
        sums.push_back(currentSum);
        for(int i=k;i<numsSize;i++){
            currentSum+= nums[i];
            currentSum-= nums[i-k];
            sums.push_back(currentSum);
        }

        int sumsSize=sums.size();

        vector<int> leftMaxIndexes(sumsSize);
        int leftMaxIndex= 0;
        for(int i=0;i<sumsSize;i++){
            if(sums[i]> sums[leftMaxIndex]){
                leftMaxIndex= i;
            }

            leftMaxIndexes[i]= leftMaxIndex;
        }

        vector<int> rightMaxIndexes(sumsSize);
        int rightMaxIndex= sumsSize-1;
        for(int i=sumsSize-1;i>=0;i--){
            if(sums[i]>= sums[rightMaxIndex]){
                rightMaxIndex= i;
            }
            rightMaxIndexes[i]= rightMaxIndex;
        }


        int currentTotalSum= 0;
        vector<int> res;

        for(int i=k;i+k<sumsSize;i++){
            int leftIndex= i-k;
            int rightIndex= i+k;
            if(sums[leftMaxIndexes[leftIndex]]+ sums[i]+ 
                sums[rightMaxIndexes[rightIndex]] > currentTotalSum){
                    res= {leftMaxIndexes[leftIndex], i, rightMaxIndexes[rightIndex]};
                    currentTotalSum= sums[leftMaxIndexes[leftIndex]]+ sums[i]
                        + sums[rightMaxIndexes[rightIndex]] ;
            }
        }

        return res;

    }
};
Leave a Comment