这道题是老师让做的,也不知道老师的要求标准是什么,反正现在讲到动态规划了吧?反正On就完事了。
先初始化一个相同大小的数组,然后进行累加,我不认为这是一个难的问题。。。
注意这是一个连续的,其实就是加起来的不丢掉,先存着,就是这样。最后来一个对比,就酱。
不行,这样不行,因为并不是只要碰到负数就停下,或许后面更高呢?对不对?所以它需要一个横向比较,也就是需要一个二维表,一直在填,因为我需要知道它会不会大于啊???也就是说,必须加到头,但这样又不行,怎么着都是n^2啊感觉,算了算了先不做了
这个题,怎么说呢,要说简单,肯定不简单,最重要的就是保留前一个的值,这样比较快,也只是刚刚能过而已,最后有一个特别大的数组,你至多n^2,空间复杂度不能n^2,否则过不了。
兄弟,刚过才是成功的一半,另外的,我们要优化到90%啊。自己没头绪了可以看看网上的。
在网上,我终于弄明白了我之前想的概念是什么:增益效果,这个增益效果是一种叠加的,类似导数,或者速度加速度之类的性质,为什么可以这么想呢?数和就相当于路程,数就相当于速度,即便速度在下降,数和仍然是在上涨的。
也不能这么说,因为最大值是每次叠加之后取最大的,确实是挺巧妙的,可移植性差,这种特性就叫做正数增益。这个可能是一种新的思想。
为什么这么说呢,考虑一个从头开始的,到某一位,sum为0了,那么自这位,一直往前,不论是多少位,它都是小于零的,你想啊,既然sum为0,那么它一定最后一位为0,如果最后一位为正数,那么就提前为负了对不对?也就是说这段数组的后半段之和,一定为负数,前半段之和,一定为正数。为什么不能倒过来呢?这是因为它以sum大于0为条件进行的扩展,一旦sum为0,它就直接设新位了,这果然是最最简单的做法了。
leetcode 53.最大子序和
最新推荐文章于 2025-05-24 22:51:56 发布
本文探讨了一种使用动态规划解决连续子数组最大和问题的方法。通过保留前一个元素的值,实现快速比较,避免了不必要的计算。文章还讨论了如何避免在遇到负数时立即停止,而是继续向前寻找可能更高的值,引入了正数增益的概念,强调了数组元素的叠加效应。最终,作者通过网络资源理解并实现了这一算法,将其优化至接近90%的效率。
369

被折叠的 条评论
为什么被折叠?



