剑指Offer42-连续子数组的最大和

剑指Offer42-连续子数组的最大和

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。

要求时间复杂度为O(n)。

示例1:


输入: nums = [-2,1,-3,4,-1,2,1,-5,4]

输出: 6

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

提示:

  • 1 <= arr.length <= 10^5

  • -100 <= arr[i] <= 100

来源:力扣(LeetCode)

链接:力扣

一解

使用动态规划,设 dp[i] 代表以元素 nums[i] 结尾的连续子数组最大和:

-2,1,-3,4,-1,2,1,-5,4为例:

i = 1时,由于dp[0] < 0,故以 nums[1] 结尾的连续子数组最大和就是 nums[1] :dp[1] = nums[1]

后续过程以此类推。


class Solution:

    def maxSubArray(self, nums: List[int]) -> int:

        for i in range(1, len(nums)):

            nums[i] += max(nums[i - 1], 0)

        return max(nums)