该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
纯新手,最近想学一下算法,上网看了个教程,看到了一个很经典的返回最大子数组之和的问题,然后我想问一下我用分治法把最大和求出来了,但是要怎么返回子数组本身呢,因为是函数的递归,所以有些云里雾里。以下是我模仿着写的代码。输出结果是30。
int MaxAddSub(int *a,int front,int end)
{ //int i1,i2;
if(front==end)
return a[front];
int Middle=(front+end)/2;//寻找中间位置
int Max_1= MaxAddSub(a,front,Middle);//求左侧的数组最大的前缀和
int Max_2= MaxAddSub(a,Middle+1,end);//求右侧的数组最大的前缀和
int i,New=0,Left=0;
for(i=Middle;i>=front;i--)
{
New+=a[i];
if(Left
{
Left=New;
//i1=i;
}
}
int Right=0;
New=0;
for(i=Middle+1;i<=end;i++)
{
New+=a[i];
if(Right
{
Right=New;
//i2=i;
}
}
int Max_3=Left+Right;
if(Max_1>Max_2&&Max_1>Max_3)
return Max_1;
if(Max_2>Max_1&&Max_2>Max_3)
return Max_2;
if(Max_3>Max_2&&Max_3>Max_1)
return Max_3;
int main()
{
int Max;
int a[9]={1,-2,3,10,-4,7,2,5,7};
Max=MaxAddSub(a,0,8);
printf("%d",Max);
return 0;
}