题解 | #连续子数组的最大和#

连续子数组的最大和

http://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484

这道题可以用动态规划法
每次遍历到某个值的时候,要不把它加到现有的总和上去,要不以它为头,从头开始计算总和。假设当前总和为s,当前遍历到的值为i,那么要对比s+i和i的大小,也就是看s是否大于0

先列举几种情况
当前总和(s) 当前值 现和 决策
3 -2 1
1 2 3 无脑加,总和为3
-1 2 1 无脑不加,总和为2
-1 -2 -3 无脑不加,总和为-2
问号的地方,大多数人的想法是,我不加,这样还是3,但加的话,反而变成了1,但更不想选择从头再来(和是-2),所以就不加了。可问题是,你永远不知道再后面的那个值,是否想要加进来,比如再来了个6
即3,-2,6
这种情况,你会想如果当时从3加到-2过来该多好,总和就是7。而不是6了
所以,注意如果当前值小于0,但s大于0,不能停滞不前,虽然这会短暂地使总和变小
代码如下
max_value = -999
sum = 0
for i in array:
    if sum > 0:
        sum += i
    else:
        sum = i
    if sum > max_value:
        max_value = sum
return max_value




全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务