标签:长度 数组 最大 连续子序列 base 负数 最大值 元素 分治思想
比如,对于数组 1,-3,2,6,-5,81,−3,2,6,−5,8,其最大连续子序列之和是 2+6-5+8=112+6−5+8=11。
对于一段区间内的最大连续子序列和,我们能不能借助分治思想,将这个大问题拆分成两个子问题,然后将两个子问题的解合并为大问题的解呢?
我们记录一段子区间 [x,y][x,y] 的三个结果:从最左端向右的最大连续子序列 [x,y]_{lmax}[x,y]?lmax??、从最右端向左的最大连续子序列 [x,y]_{rmax}[x,y]?rmax??、区间内的最大连续子序列 [x,y]_{max}[x,y]?max??(没有是否靠着某个端点的限制)。
对于区间 [a,b][a,b],我们可以先递归地求解两个子区间 [a,mid],[mid+1,b][a,mid],[mid+1,b] 的三个值 lmax,rmax,maxlmax,rmax,max。之后,对两个子区间进行合并:
这个算法和归并排序非常像,时间复杂度也和归并排序一致,是稳定的 \mathcal{O}(nlogn)O(nlogn)。
标签:长度 数组 最大 连续子序列 base 负数 最大值 元素 分治思想
原文地址:http://www.cnblogs.com/upstart/p/6764827.html