#include<stdio.h>
int FindMaxCrossSum(int A[],int left,int right);
int FindMaxSubSeq(int A[],int left,int right);
int main()
{
int A[]={1,-5,9,8,1,-2};//只是一个例子
int max=FindMaxSubSeq( A,0,5);
printf("%d",max);
return 0;
}
int FindMaxCrossSum(int A[],int left,int right)
{
int mid=(left+right)/2;
int leftmax=-9999,leftsum=0;
for(int i=mid;i>left;i--)
{ leftsum+=A[i];
if(leftsum>leftmax)
leftmax=leftsum;
}
int rightmax=-9999,rightsum=0;
for(int i=mid+1;i<right;i++)
{ rightsum+=A[i];
if(rightsum>rightmax)
rightmax= rightsum;
}
return leftmax+rightmax;
}
int FindMaxSubSeq(int A[],int left,int right)
{
if(left==right) return A[left];
else
{ int mid=(left+right)/2;
int m=FindMaxSubSeq( A,left,mid);
int n=FindMaxSubSeq( A,mid+1,right);
int p=FindMaxCrossSum(A,left,right);
if(m>n&&m>p) return m;
if(n>m&&n>p) return n;
if(p>m&&p>n) return p;
}
}
分治法求数组最大连续子序列的和
最新推荐文章于 2023-08-13 11:11:40 发布
