求子数组的最大和
#include <iostream>
using namespace std;
bool FindGreatestSumOfSubArray(int *pData, unsigned int nLength, int &nGreatestSum)
{
if (!pData||0==nLength)
{
return false;
}
int nCurrentSum=nGreatestSum=0;
for (unsigned int i=0; i<nLength; i++)
{
nCurrentSum+=pData[i];
//if the sum is negative, discard it.
if (nCurrentSum<0)
{
nCurrentSum=0;
}
if (nCurrentSum>nGreatestSum)
{
nGreatestSum=nCurrentSum;
}
}
//if all data are negative, find the greatest element in array
if (nGreatestSum==0)
{
nGreatestSum=pData[0];
for (unsigned int i=1; i<nLength; ++i)
{
if (pData[i]>nGreatestSum)
{
nGreatestSum=pData[i];
}
}
}
return true;
}
int main()
{
int data[]={1, -2, 3, 10, -4, 7, 2, -5};
int greatest=0;
unsigned int length=sizeof(data)/sizeof(int);
cout<<"length = "<<length<<endl;
if (FindGreatestSumOfSubArray(data, length, greatest))
{
cout<<"the greatest sum of the sub array is: "<<greatest<<endl;
}
for (int i=0; i<5; i++)
{
cout<<i<<"\t";
}
cout<<endl;
for (int j=0; j<5; ++j)
{
cout<<j<<"\t";
}
cout<<endl;
return 0;
}