2021-12-08 689. 三个无重叠子数组的最大和

自己想了个思路,选择排序加一个二数组记录坐标,可惜这么做只能得到局部最优解,得不到全局最优,因此看了官方题解的思路,滑动窗口和DP;滑动窗口更好理解,且挺适合这种多个出发点记录最大子数组之和的

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=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;
}

你可能感兴趣的:(2021-12-08 689. 三个无重叠子数组的最大和)