最大连续子数组

来源:互联网 发布:知乎药丸 编辑:程序博客网 时间:2024/06/04 19:03

本总结是是个人为防止遗忘而作,不得转载和商用。

题目

         给定一个数组A[0,…,n-1],求A的连续子数组,使得该子数组的和最大。

         如:数组A:1, -2, 3,10, -4, 7, 2, -5中,子数组3, 10, -4, 7, 2的和最大。

思路

         将i从0遍历到n-1,假设现已经找到以第i项为结尾的最大子数组,假设它的和是Si,然后想看看添加第i+1项后的最大子数组Si+1

         于是就看看Si

                   若Si> 0:则Si+1 = a[i+1] + Si

                   若Si< 0:则Si+1 = a[i+1]

         即:Si+1= max(a[i+1] + Si, a[i+1])

         初始化:S[0] =A[0]

        

         进一步

         既然我计算Si+1时只需要看Si,那我就不用在保存第i+1项之前的数组了,直接用一个数代替Si就好。

时间复杂度

         O(n)

 

0 0