//返回a和b中较大的一个
void max(int a, int b)
{
return a>b?a:b;
}
int findSubMax(int * A, int length)
{
int nStart = A[0];
int nMax=A[0];
//循环计算出最大子序列和
for(int i = 1; i < length; i++)
//在计算的过程当中,一旦nStart变成了负数,则将其重置为0
nStart=max(0, max(0, nStart) + A[i]);
//如果nStart的数值大于nMax,则更新nMax
nMax = max(nMax, nStart);
}
return nMax;
}
//通用的简单明显的代码
int findSubMax(int* A, int length)
{
int nStart = 0;
int nMax = 0;
for(int i = 0; i < length; i++)
{
nStart += A[i];
if(nStart < 0)
nStart = 0;
if(nStart > nMax)
nMax = nStart;
}
return nMax;
}