写一个时间复杂度尽可能低的程序,求一个数组中(N个元素)中最长递增子序列的长度。
#include<stdio.h>
#include<stdlib.h>
int Max(int a[],int n)
{
// int n = sizeof(a)
int max = a[0];
int i = 0;
for (i = 1;i < n;i++)
{
if (a[i] > max)
max = a[i];
}
return max;
}
int Lis(int array[],int n)
{
int LIS[n];
int i = 0,j = 0;
for (i = 0;i < n;i++)
{
LIS[i] = 1;
for (j = 0;j < i;j++)
{
if (array[i] > array[j] && LIS[j]+1 > LIS[i])
{
LIS[i] = LIS[j]+1;
}
}
}
int len = sizeof(LIS)/sizeof(int);
return Max(LIS,len);
}
int main()
{
int a[] = {1,-1,2,-3,4,-5,6,-7};
printf("%d\n",Lis(a,sizeof(a)/sizeof(a[0])));
return 0;
}
运行如下:
[root@localhost ~]# ./a.out
4
[root@localhost ~]#