题目:
输入一个整形数组,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值并输出该子数组成员。要求时间复杂度为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[N];
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;
}
本文介绍了一个使用C++实现的算法,该算法能在O(n)的时间复杂度内找到给定整数数组中具有最大和的连续子数组,并输出该子数组的元素。通过遍历数组并动态调整累加和来实现。
641

被折叠的 条评论
为什么被折叠?



