要点:
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;
}