最大字数组问题即对某一数组A,其元素有正有负,找到一个子数组,其元素是连续的且其和最大。
如图数组A:
其最大字数组为A[7..10],即A[7]+A[8]+...+A[10]=43是数组A连续元素中最大值。
我们用分治法求解:
假设我们要寻找数组A[low...high]的最大子数组,使用分治法意味着我们要将数组划分成两个规模尽量相等的子数组。也就是说找到数组的中间位置mid,然后考虑A[low...mid]和A[mid+1...high],A[low...high]的最大子数组A[i...j]必然是一下三种情况之一:
完全位于A[low...mid]中,即low<=i<=j<=mid;
完全位于A[mid+1...high]中,即mid+1<=i<=j<=high;
跨越了中点,因此low<=i<=mid<j<=high;
伪代码:
C+