方法一:采用分治法求解 分为三种状况 将序列递归的二分 而最大值位于三种可能的位置 一是完全位于左边 二是完全位于右边 三是横跨左右代码如下
int maxSubSum(int *A ,int left,int right)
{
int maxLeftSum=0;
int maxRightSum=0;
int leftBorderSum=0;
int rightBorderSum=0;
int maxLeftBorderSum=0;
int maxRightBorderSum=0;
if(left==right)
return A[left]>0? A[left]:0;
int center=(left+right)/2;
maxLeftSum=maxSubSum(A,left,center);
maxRightSum=maxSubSum(A,center+1,right);
for(int i=center;i>=left;i--)
{
leftBorderSum+=A[i];
if(leftBorderSum>maxLeftBorderSum)
maxLeftBorderSum=leftBorderSum;
}
for(int j=center+1;j<=right;j++)
{
rightBorderS