腾讯华理工笔考题,求最大子组和

腾讯华理工笔试题,求最大子组和
算法填空题:有整数数组A(A[0],A[1],...,A[n]),求最大子组和。
例:数组 1,2,-4,5,-3,6,7,-5 最大子组和为:15 即取子组5,-3,6,7,-5

int max(int a,int b);//返回a和b两者中的最大值

int SubMax(int A[],int sizeLength)
{
  int nStart=A[0];
  int nAll=A[0];
  for(int i=1;i<sizeLength;++i)
  {
  1、__(填一语句)______
  2、__(填一语句)______
  }
  return nAll;
}

------解决方案--------------------
对头 就是编程艺术上面的题 我今天也参加了 但是试卷就只两个空 我怎么压缩都压缩不到两个空 除非if() statement;可以算是一个空那就搞定了。
int SubMax(int A[],int sizeLength)
{
int nStart=A[0];
int nAll=A[0];
for(int i=1;i<sizeLength;++i)
{
1、(nStart<0) ? nStart=A[i] : nStart+=A[i];
2、if(nAll<nStart) nAll=nStart;
}
return nAll;
}
这样就搞定了
------解决方案--------------------
上面错了。更正如下:
for( j=i;j<sizeLength;++j )
nAll = max( nAll, max(nStart += a[i], a[i] +=a[j]) );
------解决方案--------------------
9楼用A[] = {-5, 6}测试就通不过吧,正确值应该是6,但返回1。

int SubMax(int A[],int sizeLength)
{
int nStart=A[0];
int nAll=A[0];
for(int i=1;i<sizeLength;++i)
{
nStart = nStart < 0 ? max(A[i], 0) : max(nStart+A[i], 0);
nAll = nAll < 0 ? max(0, nStart) : max(nAll, nStart);
}
return nAll;
}

根据《编程珠玑》第8章算法来的:
int SubMax(int A[],int sizeLength)
{
int nStart=0;
int nAll=0;
for(int i=0;i<sizeLength;++i)
{
nStart = max(nStart+A[i], 0);
nAll = max(nAll, nStart);
}
return nAll;
}