1.重复利用已经计算的子数组和:O(n2)
def maxSubArr(arr):
if arr == None:
print('数组为空')
return
maxsum = -2**31
i = 0
lens = len(arr)
while i<lens :
j = i
sums = 0
while j<lens :
sums += arr[j]
if sums > maxsum :
maxsum = sums
j += 1
i += 1
return maxsum
2.动态规划法:O(n)
def maxSubArr(arr):
lens = len(arr)
if arr == None or lens<1 :
print('参数不合法')
return
ends = alls = arr[0]
i = 1
while i<lens :
ends = max(ends+arr[i], arr[i]) #包含最后一个元素的最大子数组和
alls = max(ends, alls) #最大子数组和
i += 1
return alls

本文介绍了两种求解子数组最大和的算法,一种是通过重复利用已计算的子数组和,时间复杂度为O(n^2);另一种是采用动态规划法,时间复杂度优化至O(n)。通过对比,动态规划法更高效。
108

被折叠的 条评论
为什么被折叠?



