最大连续子数组问题(python3实现)

关于最大连续子数组问题,即求一个给定数组中和最大的一个连续子数组的和。
我们这里用动态规划的思想来解决这个问题。
我们以s[i]记为以a[i]为结尾的数组和中的最大子数组
则此时我们可以得到s[i+1] = max(s[i]+a[i+1] , a[i+1])
接下来,我们举例进行说明。假设有个数组如下
a 2 -3 -4 9 10
sum[i] (前i项和) 2 -1 -5 4 14
根据上述递推关系式
s[0] = a[0] = 2 = s[0]
s[1] = max(-1, -3) =  -1 = s[1]
s[2] = max(-5,-4) = -4 = a[2]
此时起点应该变更为a[2] ,
s[3] = max(4,9) = 9 = a[3]
此时起点应该为以a[3] 然后依次进行。


此时我们对上述的动态规划式子还可以进行一个优化。对于s[i+1] = max(s[i]+a[i+1] , a[i+1])
我们知道,当s[i]<0时,s[i]+a[i] < a[i]恒成立,而s[i]>0时,s[i]+a[i] > a[i]恒成立
于是我们又有了新的递推式,用于简化刚才的计算。我们依然用上述例子说明
a 2 -3 -4 9 10
sum[i] (前i项和) 2 -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值