问题描述
给定一个数列,其中可能有正数也可能有负数,找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大
解题思路
状态转移方程:sum[i] = max{sum[i-1]+a[i],a[i]}. (sum[i]记录以a[i]为子序列末端的最大序子列连续和),更新最大值就可以了
代码实现
# -*- encoding=UTF-8 -*-
def greatestSumOfSubArray(array):
if not array:
return 0
result, sum = array[0], array[0]
for item in array[1:]:
if sum <= 0:
sum = item
else:
sum += item
if sum >= result:
result = sum
return result
if __name__ == "__main__":
arraylist = [-2, 2, 1, -3, 4, 7, -4, 8]
result = greatestSumOfSubArray(arraylist)
print result