剑指 Offer 42. 连续子数组的最大和

题目描述

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。

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

解题思路

这个问题的主要要保证时间复杂度O(n)

  1. 我们先判断之前数的和与加上当前item以后的和大小,
  2. 然后在比较上次结果与我们第一判断的结果, 就可以得到最大值
  3. 这里我们又给小技巧, 先赋值nums[0], 然后直接从index=1开始遍历,我们就可以直接处理nums只有一个值的情况

示例代码

def maxSubArray(self, nums: List[int]) -> int:
    add = nums[0]
    res = add
    for i in range(1, len(nums)):
        item = nums[i]
        add = max(item, add + item)
        res = max(res, add)
    return res
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享