Leetcode 53. 最大子序和
题目说明
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
题目解析
-
动态规划
从第二个元素开始,后面每一个元素都为该元素 + max(0,上个元素)
-
滑动窗口
设置中间值mid = 0, 遍历数组,当数组元素 + mid > 0 ,赋值给mid,mid赋值result;当数组元素 + mid <= 0, 为mid 赋值 0 。返回result
Python代码
def maxSubArray(self, nums: List[int]) -> int:
for i in range(1, len(nums)):
nums[i] = nums[i] + max(nums[i - 1], 0)
return max(nums)
def maxSubArray(self, nums: List[int]) -> int:
if max(nums) < 0:
return max(nums)
result, mid = 0, 0
for i in nums:
if mid + i > 0:
mid += i
if result < mid:
result = mid
else:
mid = 0
return result