问题:寻找A的和最大的非空连续子数组。例如,{1,-5,4,-6,2,3,7,-4,9,-3}的最大子数组为{2,3,7,-4,9}
分析:采用分治技术来求解最大子数组问题。假定我们要寻找子数组A[low,high]的最大子数组。使用分治技术意味着我们要将子数组划分为两个规模尽量相等的子数组。
A[low...high]的任何连续子数组A[i...j]所处位置必然是一下三种情况之一:
1.完全位于子数组A[low...mid]中,因此low<=i<=j<=mid。
2.完全位于子数组A[mid+1...high]中,因此mid<i<=j<=high。
3.跨越了中点,因此low<=i<=mid<=j<=high。
我们可以很容易的求出跨越中点的最大子数组。
struct result Find_Max_Crossing_SubArray(int A[], int low, int mid, int high)
{
struct result myResult;
int left_sum = -10000;
int sum = 0;
for(int i = mid; i >= low; i--)
{
sum = sum