689. Maximum Sum of 3 Non-Overlapping Subarrays三个不重合数组的求和最大值

Posted immiao0319

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了689. Maximum Sum of 3 Non-Overlapping Subarrays三个不重合数组的求和最大值相关的知识,希望对你有一定的参考价值。

[抄题]:

In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum.

Each subarray will be of size k, and we want to maximize the sum of all 3*k entries.

Return the result as a list of indices representing the starting position of each interval (0-indexed). If there are multiple answers, return the lexicographically smallest one.

Example:

Input: [1,2,1,2,6,7,5,1], 2
Output: [0, 3, 5]
Explanation: Subarrays [1, 2], [2, 6], [7, 5] correspond to the starting indices [0, 3, 5].
We could have also taken [2, 1], but an answer of [1, 3, 5] would be lexicographically larger.

 [暴力解法]:

时间分析:

空间分析:

 [优化后]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

把“前i项”初始化为“第i项”,方便直接做差

for (int i = 1; i <= n; i++) {
            sums[i] = sums[i - 1] + nums[i - 1];
        }

[思维问题]:

不知道为什么要用DP:每次都保存之前一组的状态,然后一个个向前更新和比价。

求一组固定为k长度的数组时可用。

//总和=本组和+之前组的和=本组最后之和-本组第一之和+之前的(从j - k开始的)dp求和值
int curSum = sums[j] - sums[j - k] + dp[i - 1][j - k];

[英文数据结构或算法,为什么不用别的数据结构或算法]:

dp数组里存储了结果,可以通过不断输入index来把结果取出来:

int index = n;
        for (int i = 2; i >= 0; i--) {
            res[i] = pos[i + 1][index];
            System.out.println("index = " +index);
            System.out.println("res[i] = pos[i + 1][index] = " +res[i]);
            
            index = res[i];
            System.out.println("index = " +index);
            System.out.println("----------------");
           
        }

 

[一句话思路]:

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

[二刷]:

[三刷]:

[四刷]:

[五刷]:

  [五分钟肉眼debug的结果]:

[总结]:

[复杂度]:Time complexity: O() Space complexity: O()

[算法思想:迭代/递归/分治/贪心]:

[关键模板化代码]:

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

 [代码风格] :

 [是否头一次写此类driver funcion的代码] :

以上是关于689. Maximum Sum of 3 Non-Overlapping Subarrays三个不重合数组的求和最大值的主要内容,如果未能解决你的问题,请参考以下文章

689. Maximum Sum of 3 Non-Overlapping Subarrays

689. Maximum Sum of 3 Non-Overlapping Subarrays

leetcode689. Maximum Sum of 3 Non-Overlapping Subarrays

689. Maximum Sum of 3 Non-Overlapping Subarrays

[Leetcode]689.Maximum Sum of 3 Non-Overlapping Subarrays

689. Maximum Sum of 3 Non-Overlapping Subarrays三个不重合数组的求和最大值