求子数组的最大和并输出该子数组各成员
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;
}
输入一个整形数组,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值并输出该子数组成员。要求时间复杂度为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;
}
相关文章推荐
- 返回一个整数数组中最大子数组的和(补充:输出该子数组)
- 求子数组的最大和问题--一道浙江大学考研压轴题(被Google拿来做面试题)
- 求子数组的最大值
- 第2题 求子数组最大和
- 求子数组的最大和(数组)
- 编程之美系列之求子数组的最大和(续)
- 求子数组最大和
- 输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 求子数组的最大和
- 有一个整形数组int[]arr,将里面的值排序为最大值后输出
- Java编程:定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,平均值,和值,并输出出来。
- 微软面试100题系列---求子数组的最大和
- 求子数组的最大和
- 求子数组的最大和
- <跟着结构之法一起学算法>求子数组的最大和
- 【July第3题】求子数组的最大和
- 【转】求子数组的最大和
- 3:求子数组的最大和
- 求子数组最大乘积
- 求子数组的最大值之和并给出子数组的下标