最大子数组线性解法
问题:
连续的若干数组元素,如果其和是最大的,那么这个子数组就称为该数组的最大子数组。
FindEasy(A)::
#判断数组A是否为空,为空则返回
if len(A) < 1:
return None
SumMax = A[0]
SumStart = 0
start = 0
SumStop = 0
sum = 0
for i in range(0, len(A)-1, 1):
sum += A[i]
if sum > SumMax:
SumStop = i
SumMax = sum
SumStart = start
#最大子数组,如果值大于零,两端的值肯定大于零
elif sum < 0:
start = i
sum = 0
#判断起点:为len(A) - 1时是数组最后一个元素,且SumStart和SumStop不相等
if SumStart < len(A) - 1 and SumStart < SumStop - 1:
SumStart += 1
return SumStart, SumStop, SumMax
A = (13, -3, -25, 20, -3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7)
print(A)
print(FindEasy(A))
输出:
(13, -3, -25, 0, -3, -16, -23, 18, 20, -7, 12, -5, -22, -4, 7)
(7, 10, 43)