下面的代码,如果存在多个最大的子序列,则只返回最前面的。
如果数组全为负数,比如-3, -2, -1, -8, 程序返回 -1,起始,终止位置都是2
int MaxNumber(int* A){
int nStart = A[0];
int nAll = A[0];
int tmpStart = 1;
int si = 1 , ei = 1;
for( int i = 1; i < n; i++)
{
if (nStart < 0)
{
nStart = 0 ;
tmpStart = i+1;//记录起点
}
nStart += A[i];
if (nStart > nAll)
{ //找到一个结果 ,记录起点终点
ei = i+1;
nAll = nStart;
si = tmpStart;
}
}
return nAll;
}
编程之美:子序列最大和
最新推荐文章于 2022-02-20 20:14:50 发布