「每日LeetCode」2021年4月20日

本文最后更新于:2023年3月19日 晚上

面试题 16.17. 连续数列

面试题 16.17. 连续数列

给定一个整数数组,找出总和最大的连续数列,并返回总和。
示例:

1
2
3
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

思路

基础动态规划题,当前数的最大连续子数组和只和上一个数的最大连续子数组和有关:例如,第一二个元素,当前这两个元素的最大连续子数组和为 nums[0] + nums[1]或者 nums[1]中的一个,更新 max,然后将其看为一个整体,接下来的每一个数都是如此的关系。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function (nums) {
let pre = nums[0],
max = nums[0];
for (let i = 1; i < nums.length; i++) {
pre = Math.max(pre + nums[i], nums[i]);
max = Math.max(max, pre);
}
return max;
};