Untitled
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