腾讯笔试题之数组最大子序列和O(n)

来源:互联网 发布:php httprequest 使用 编辑:程序博客网 时间:2024/05/05 14:45
//返回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;}