思路:先求sum,如果当前sum小于0,那么求和从下一个数开始。例如:2 3 -6 7 9 3 -2,先求和sum=2,然后sum=2+3=5,sum=2+3-6=-1<0,那么最大的sum从a[3]开始,即从7开始。
#include<iostream>
using namespace std;
int qiuhe(int a[],int n)
{
int begin=0,end=0;
int i=0;
int sum=0,max=0;
for(i=0;i<n;i++)
{
sum=sum+a[i];
if(sum<0)
{
begin=i+1;
sum=0;
i=begin;
}
if(sum>max)
{
max=sum;
end=i;
}
// cout<<begin<<' '<<end<<endl;
}
for(int m=begin;m<=end;m++)
cout<<a[m]<<' ';
cout<<endl;
return 0;
}
int main()
{
int a[100],x=0;
while(cin>>a[x])
{
x++;
}
qiuhe(a,x);
return 0;
}
本文介绍了一种求解最大子数组和问题的算法,并通过C++代码实现了该算法。算法核心思想是从数组的第一个元素开始逐步累加,一旦发现当前累加和小于0,则将累加起点后移并清零累加和,最终找到最大子数组。

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



