找出由n个数组成的序列内最长的递增子序列

时间:2021-01-14 09:52:25

取一个b[]数组,将原数组的任意一个数之前为递减序列的数的个数储存在里面(如下)

a[7]: 1 2 1 2 3 4 5

b[7]: 0 1 0 1 2  3 4

最后求出b数组内最大值以及其下标,然后对应输出a数组内的值

输出结构如下:

找出由n个数组成的序列内最长的递增子序列

找出由n个数组成的序列内最长的递增子序列

找出由n个数组成的序列内最长的递增子序列

找出由n个数组成的序列内最长的递增子序列

完整代码如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[1000],b[1000];
    int n,i,j,k=0,m,m1;
    scanf("%d",&n);
    for(i=0;i<n;i++){
      scanf("%d",&a[i]);
    }
    b[0]=0;
    for(i=1;i<n;i++){
      for(j=i;a[j-1]<=a[j];j--){
                 k++;
      }
      b[i]=k;
      k=0;
    }
    for(i=1,m=b[0],m1=0;i<n;i++){
      if(b[i]>=m){
            m=b[i];
            m1=i;
      }
    }
    for(;m>=0;m--){
      printf("%2d",a[m1-m]);
    }
    return 0;
}