最大连续子数组
2016-10-26 16:32
232 查看
本总结是是个人为防止遗忘而作,不得转载和商用。
如:数组A:1, -2, 3,10, -4, 7, 2, -5中,子数组3, 10, -4, 7, 2的和最大。
于是就看看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就好。
题目
给定一个数组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)相关文章推荐