您的位置:首页 > 其它

求子数组的最大和并输出该子数组各成员

2011-03-20 14:49 218 查看
题目:

输入一个整形数组,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值并输出该子数组成员。要求时间复杂度为O(n)。

#include <iostream>

using namespace std;

int Sum(int *a,int size,int *&result,int &count);

int main()

{

const int N=8;

int a[]={1,-2,3,10,-4,7,2,-5};

int *result=new int
;

int sum=0;

int count=0;

memset(result,0,N);

sum=Sum(a,N,result,count);

cout<<"结果是:"<<sum<<endl;

for(int i=0;i<=count;i++)

{

if(i==count)

cout<<result[i]<<"="<<sum<<endl;

else

cout<<result[i]<<"+";

}

delete []result;

system("pause");

return 0;

}

int Sum(int *a,int size,int *&result,int &n)

{

if(size<=0)

return 0;

int temp=a[0];

int i=0,sum=0,count=0;

for(i=1;i<size;i++)

{

if(temp<a[i])

{

temp=a[i];

}

}

if(temp<=0)

{

result[0]=temp;

return temp;

}

else

{

temp=0;

for(i=0;i<size;i++)

{

if(temp<=0)

{

temp=a[i];

}

else

{

temp+=a[i];

}

if(temp>sum)

sum=temp;

}

temp=0;

for(i=0;i<size;i++)

{

if(temp<=0)

{

count=0;

temp=a[i];

memset(result,0,size);

result[0]=a[i];

}

else

{

result[++count]=a[i];

temp+=a[i];

if(temp==sum)

{

n=count;

break;

}

}

}

}

return sum;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: