您的位置:首页 > 其它

最大连续子数组

2016-10-26 16:32 232 查看
本总结是是个人为防止遗忘而作,不得转载和商用。

题目

         给定一个数组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)

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法