//返回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; }