问题
给你一个整数list L, 如 L=[2,-3,3,50], 求L的一个连续子序列,使其和最大,输出最大子序列的和。 例如,对于L=[2,-3,3,50], 输出53
方法一:暴力破解
最简单的方法就是直接求解出所有的子序列之和,然后比较子序列之和,求出最大值。那么如何求解子序列呢?首先子序列的起始位置可能是任意的,结束位置也可以是任意的。可以一层循环确定子序列的起始位置,嵌套一层循环确定子序列的结束位置并求和,(这里我简化了,直接利用上一个子序列的结果进一步求和),添加到空列表中。
sums = 0
L_fy = []
for i in range(len(L)):
for j in range(i, len(L)):
sums += L[j]
L_fy.append(sums)
sums = 0
maxs = max(L_fy)
return maxs
改进一
这肯定是最基本的方法了,看看还能不能改进呢?一个改进的方法,就是在比较的时候,不用先存到列表里。计算出一个子序列和就与之前的最大值比较,得出当前的最大值。
maxs = L[0] #最好不要设为0,因为下面比较的时候,如果全是负数,那最终就为0,明显是不对的。
sums = 0
for i in range(len(L)):
for j in range(i, len(L)):