求数组的最大非递减序列的长度。具体的讲解请参看上篇给出的链接。
#include <stdio.h>
#include <stdlib.h>
//MaxIncrementSubListLength求数组的最大非递减子序列的长度,输入参数分别为数组名和数组长度
int MaxIncrementSubListLength(int a[],int arrayLength)
{
int *MaxArrayLength=(int *)malloc(arrayLength*sizeof(int));
int TempLength = 1;
for (int outIndex=0;outIndex<arrayLength;outIndex++)
{
MaxArrayLength[outIndex]=1;
for (int innerIndex=0;innerIndex<outIndex;innerIndex++)
{
if (a[innerIndex]<=a[outIndex] && MaxArrayLength[innerIndex]+1>MaxArrayLength[outIndex])
{
MaxArrayLength[outIndex] = MaxArrayLength[innerIndex]+1;
}
}
if (MaxArrayLength[outIndex]>TempLength)
{
TempLength=MaxArrayLength[outIndex];
}
else
{
MaxArrayLength[outIndex]=TempLength;
}
printf("the MaxarrayLength of first %d elements is %d\n",outIndex+1,MaxArrayLength[outIndex]);
}
free(MaxArrayLength);
return TempLength;
}
int main()
{
int A[8]={ 5, 3, 4, 8, 6, 7, 10, 10};
int Maxlength;
Maxlength = MaxIncrementSubListLength(A,8);
printf("the max subarray length of A is %d",Maxlength);
getchar();
return 0;
}