最大连续子序列和Python

问题

给你一个整数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)):
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值