自己想了個思路其弊,選擇排序加一個二數(shù)組記錄坐標(biāo),可惜這么做只能得到局部最優(yōu)解椒拗,得不到全局最優(yōu)似将,因此看了官方題解的思路,滑動窗口和DP蚀苛;滑動窗口更好理解在验,且挺適合這種多個出發(fā)點(diǎn)記錄最大子數(shù)組之和的
Go版本:
func maxSumOfThreeSubarrays(nums []int, k int) []int {
// 滑動窗口 求解多個最大和
var sum1,sum2,sum3 int;
var max_sum1,max_sum2,max_sum3 int;
var max_sum1_idx,max_sum2_idx1,max_sum2_idx2 int;
var ans []int;
n:=len(nums);
for i:=2*k;i<n;i++{
sum1+=nums[i-k*2];
sum2+=nums[i-k];
sum3+=nums[i];
if i>=k*3-1{
if sum1>max_sum1{
max_sum1=sum1;
max_sum1_idx=i-k*3+1;
}
if sum2+max_sum1>max_sum2{
max_sum2,max_sum2_idx1,max_sum2_idx2=sum2+max_sum1,max_sum1_idx,i-k*2+1;
}
if sum3+max_sum2>max_sum3{
max_sum3=sum3+max_sum2;
ans=[]int{max_sum2_idx1,max_sum2_idx2,i-k+1}
}
sum1-=nums[i-k*3+1];
sum2-=nums[i-k*2+1];
sum3-=nums[i-k+1];
}
}
return ans;
}