算法刷题系列 最大子序和问题
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [2,4,-6,6,-1,12,5,-25,14],
输出: 6
解释: 连续子数组 [6,-1,12,5,] 的和最大,为 22。
分解成为子问题:
M(j) : 在数组中第 j 个数之前最大的子序的和
N(j) : 在数组中第 j 个数的值
M(j) = max {M(j-1) + N(j), N(j)}
复杂度O(N)
Difficulty:easy
代码实现:
def maxSubarray(nums):
if len(nums) == 1:
return nums[0]
maxsum = nums[0]
curmax = lastmax = nums[0]
for i in range(1, len(nums)):
if lastmax + nums[i] > nums[i]:
curmax = lastmax + nums[i]
else:
curmax = nums[i]
if curmax > maxsum:
maxsum = curmax
lastmax = curmax
return maxsum
nums = [2,4,-6,6,-1,12,5,-25,14]
maxSubarray(nums)
outout:
22