最大连续子序列问题,也是出自编程之美。
咋做呢?当然是把结果累加,一旦累加和小于0,那么前面部分可以丢弃掉。
但如果需要具体子序列的位置时,采用动态规划的方法更合理,从后往前探测:
int maxSum(int* a,int n)
{
int nStart=a[n-1];
int nAll=a[n-1];
int start=n-1;
int end=n-1;
for(int i=n-2;i>=0;--i)
{
if(nStart<0)
{
nStart=0;
end=i;
start=i;
}
nStart+=a[i];
if(nStart>nAl)
{
nAll=nStart;
start=i;
}
}
cout<<"start="< <<"\t"<<"end="< return nAll; } 希尔排序怎么做? void shellSort(int* a,int len,int* delta,int m) { for(int i=0;i shellInsert(a,len,dleta[i]); } void shellInsert(int* a,int len,int c) { int t,j; for(int i=c;i { if(a[i]
{ t=a[i];