def max_arry(alist):
res = alist[0]
sumi = alist[0]
for item in alist:
if sumi >0:
sumi += item
else:
sumi = item
if sumi>res:
res=sumi
return res
求一个数组里的连续子数组之和的最大值是多少?
如:(5,-2,3,-2,1,4,-6)最大连续子数组为(5,-2,3,-2,1,4),最大值为9.
:动态规划:
关键就是找到长度为i-1的结果我们已经知道的情况下,数组长度变成i时,我们怎么决定最大值的选取。比如我们已经进行到长度为3的数组的最大值就是sumi = 6,这时候下一个数是-2,我们有两种选择sumi+item,更新sumi,继续下一步判断;或 舍弃sumi,从item = sumi进行新的数组求和。
之前一直理解为什么可以不用考虑比如我们在设置一个(5,-2,3,-2,-4)这样的数组时,长度为3时,sumi=6,更新sumi的条件怎么判断呢,可以看到这和我们刚刚列举的例子的下一个元素是一样的,也就是下一步的操作也是一样的,但是最后结果不一样。阿西吧~~~真的晕!
ha?编辑器变得难用了 先这样啦