剑指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)