最大子数组和「变题」

53. 最大子数组和

 

开头先来一个小插曲,关于「子数组」相关的总结可见 秒杀子数组类题目 子数组之滑动窗口篇

这个题目是一个入门的 DP,先直接给出代码:

这么简单,还总结干嘛!!因为看到很多人说这个题目考了很多「变题」

变题一:输出「最大和的连续子数组」

用三个变量temp, left, right记录每次更新时的下标

变题二:如下所示

可见题目 长度最小的子数组

本题可以直接暴力,也可以使用「滑动窗口」,之前有过相关总结 秒杀子数组类题目

具体代码如下:

变题三:可翻转部分数组

对于一个数组,求最大的子数组和,但是加了一个条件:可翻转一次任意子数组

例:数组[-1, 3, -5, 2, -1, 3],翻转子数组[-5, 2, -1, 3],最终原数组变成了[-1, 3, 3, -1, 2, -5],此时最大的子数组和是 7

思路:分别求出[0 ... i][i+1 ... n-1]的最大子数组和leftSum, rightSumleftSum, rightSum, leftSum + rightSum三者最大值即为翻转一次后最大子数组和

具体如下图所示:

3

由于该变题没有对应的题目,所以下面给出自己写的方法一和其他人写的方法二,以及测试代码

参考文章