求子数组的最大和并输出该子数组各成员
来源:互联网 发布:知产律师收入 编辑:程序博客网 时间:2024/05/21 22:49
题目:
输入一个整形数组,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值并输出该子数组成员。要求时间复杂度为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;
}
- 求子数组的最大和并输出该子数组各成员
- 求数组中和最大的子数组并输出子数组序列
- 求最大子数组的和以及输出最大子数组
- 求数组最大子数组的和
- js实现求连续子数组的最大和并输出下标
- 求最大子数组的和,以及求该最大子数组的起始位置和末尾位置
- 3 微软面试题:求子数组的最大和,并找出此子数组
- 给一个数组,求他的子串,使该子串的和最大
- 求整形数组的一个子数组,使得该子数组所有元素的和的绝对值最大。
- 求子数组最大和
- 求子数组最大和
- 求子数组最大和
- 求最大子数组和
- 求子数组最大和
- 求子数组最大和
- 求子数组最大和
- 求子数组最大和
- 求最大子数组和
- Symbian常见错误归纳
- Linux块设备子系统浅析(2.6.26)
- MVC1 and MVC2
- [zt] java中super 的两种用法
- MVC1 and MVC2
- 求子数组的最大和并输出该子数组各成员
- 关于RTEMS MINI2440的QEMU仿真从UBOOT加载问题的研究
- MVC1 and MVC2
- linux 顺序锁
- 常用的试验设计方法和SAS程序
- Ogre学习笔记 2011年3月20日 14点44分
- SGIP协议之Bind
- 关于创业搭档:一个好汉三个帮?
- C++函数