动态规划。 其子问题可以为:以第i个元素为结尾的具有最大和的连续子数组。
为此,建立一个与原数组A同样长度的数组B,其每个位置B[i]保存以A[i]为结尾的连续子数组的最大和。
数组B中的最大值即为原问题所求。
子问题的递归求解方式:
如果B[i-1]>0,则直接将A[i]补在其后就得到了以A[i]为结尾的连续子数组的最大和;
否则,说明需要把A[i-1]之前丢掉,仅A[i]一个数就构成了以A[i]为结尾的连续子数组的最大和。
python
class Solution:
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
B = [nums[0]]
for i in range(1,len(nums)):
if B[i-1] >= 0:
B.append(B[i-1]+nums[i])
else:
B.append(nums[i])
return max(B)