找出和最大的子序列(动态规划 O(n))

Posted smile-yan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找出和最大的子序列(动态规划 O(n))相关的知识,希望对你有一定的参考价值。

题目描述

给一个数组,寻找其中和最大的子串

输入

[1, -10, 5, 4, -8, 10, -20]

输出

最大子串的和

11

愚蠢的解法先学一下 O(n^2)

我一直在纠结纠结如何 O ( n ) O(n) O(n) ,因为我做过这类题,不应该这么固执的,现在反思一下,先写个百分百超时的吧,拿不到满分应该可以拿40分。

向以前的算法老师致歉

这种方法就是求出所有的子串,再找到最大的。

O(n) 也比较简单

基本思路就是一次遍历,如果子串的和大于0,那么这个子串就可以继续加后面的数,如果这个子串的和为负数的,那么就放弃整个子串。

ary = [1, -10, 5, 4, -8, 10, -20]

maxOne = ary[0]

total = ary[0]

for i in range(1, len(ary)):
    total +=  ary[i]
    if (total < 0):
        total = 0
    if (maxOne < total):
        maxOne = total
maxOne

总结

沉着、冷静,稳住心态。被这么简单的题目难倒了,吐了

Smileyan
2021.9.7 17:43

以上是关于找出和最大的子序列(动态规划 O(n))的主要内容,如果未能解决你的问题,请参考以下文章

动态规划-最大子矩阵

最大连续子序列(动态规划 O(n))

算法导论-动态规划学习笔记day01

动态规划——最大连续子序列和

动态规划--连续子数组的最大和

动态规划连续子数组的最大和