子序列之和的最大值,并且返回子序列的位置 Contains Negtive
下面的代码,如果存在多个最大的子序列,则只返回最前面的。
如果数组全为负数,比如-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;
}
如果数组全为负数,比如-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;
}