Untitled
unknown
c_cpp
a year ago
1.7 kB
6
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;
}
};Editor is loading...
Leave a Comment