最大连续和问题:
1、采用三重循环,算法复杂度为O(n^3)
tot=0;
best=A[1];
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++){
int sum=0;
for(int k=i;k<=j;k++)
{
sum+=A[k];
tot++;
}
if(sum>best)
best=sum;
}
2、采用双重循环,算法复杂度为O(n^2)
S[0]=0;
for(int i=1;i<=n;i++)
s[i]=s[i-1]+A[i];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
best=max(best,s[j]-s[i-1]);
3、分治法,算法复杂度为O(nlogn)
int maxsum(int* A,int x,int y)
{
int v,L,R,maxs;
if(y-x==1)
return A[x];
int m=x+(y-x)/2;
int maxs = max(maxsum(A,x,m),max(A,m,y));
int v,L,R;
v=0;L=A[m-1];
for(int i=m-1;i>=x;i--)
L=max(L,v+=A[i]);
v=0;R=A[m];
for(int i=m;i<y;i++)
R=max(R,v+=A[i]);
return max(maxs,L+R);
}