蓝桥杯训练——最长递增子序列

来源:互联网 发布:如何评价巴基斯坦知乎 编辑:程序博客网 时间:2024/06/06 10:26
问题描述:最长递增子序列
习题3.4 最长连续递增子序列(20 分)
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。
输入格式:
输入第1行给出正整数n(≤10
​5
​​ );第2行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。
输入样例:
15
1 9 2 5 7 3 4 6 8 0 11 15 17 17 10
输出样例:


3 4 6 8
作者:何知令

完成时间:2017年9月16日

代码:

/*问题描述:最长递增子序列习题3.4 最长连续递增子序列(20 分)给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。输入格式:输入第1行给出正整数n(≤10​5​​ );第2行给出n个整数,其间以空格分隔。输出格式:在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。输入样例:151 9 2 5 7 3 4 6 8 0 11 15 17 17 10输出样例:3 4 6 8作者:何知令完成时间:2017年9月16日*/#include <stdio.h>#include <stdlib.h>int main(){    int i,j,m;    int n;    int num[100000];    int ans[100000];    int maxlen=0,len;    while(~scanf("%d",&n))    {        for(i=0; i<n; i++)            scanf("%d",&num[i]);        i=0;        len=0;        while(num[i]>=0&&num[i]<=9)        {            if(num[i+1]>num[i])            {                len++;                i++;                continue;            }            else            {                if(maxlen<len)                {                    maxlen=len;                    m=i;                    for(j=maxlen; j>=0; j--,m--)                        ans[j]=num[m];                    len=0;                }                else                    len=0;            }            i++;        }        printf("%d",ans[0]);        for(i=1; ans[i]!='\0'; i++)            printf(" %d",ans[i]);        printf("\n");    }    return 0;}
知识点总结:..
学习心得:..

原创粉丝点击