您的位置:首页 > 其它

连续子数组最大和

2012-05-15 16:31 204 查看
要点:

1。 加上一个正数时,和会增加;加上一个负数时,和会减少;

2。 考虑全为负数的情况;

3。 求最大子数组的位置。

#include <iostream>
using namespace std;

int maxSum(int *a, int n)
{
int begin=0,end=0;
int sum=0,b=0,flag=0,maxf=a[0];
for(int i=0; i<n; i++)
{
//判断是否全为负数
if(a[i]>=0)
flag=1;
if(a[i]>maxf)
maxf=a[i];

//加上一个正数,和会增加;加上一个负数,和会减少
if(b<0)
{
b=a[i];
begin=i;//开始下标
}
else
b+=a[i];
if(sum<b)
{
sum=b;
end=i;//结束下标
}
}
if(flag)
{
cout<<"begin:"<<begin<<"  "<<"end:"<<end<<endl;
return sum;
}
else //全为负数时
{
cout<<"begin:0"<<"  "<<"end:"<<n-1<<endl;
return maxf;
}
}

void main()
{
//int a[10]={-11,-8,-6,-3,-1,-5,-7,-2,-10,-1};
int a[10]={1,-8,6,3,-1,5,7,-2,0,1};
cout<<maxSum(a,10)<<endl;

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