5-3 最长连续递增子序列 (20分)

来源:互联网 发布:老年鼠标手写输入软件 编辑:程序博客网 时间:2024/05/20 18:42


5-3 最长连续递增子序列   (20分)

给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。

输入格式:

输入第1行给出正整数nnn≤105\le 10^5105);第2行给出nnn个整数,其间以空格分隔。

输出格式:

在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。

输入样例:

151 9 2 5 7 3 4 6 8 0 11 15 17 17 10

输出样例:

3 4 6 8


#include<stdio.h>#include<string.h>struct node{    int b;    int k;    int m;} s[100010] ;int main(){    int i, j;    int n;    int maxi = 1, c;    scanf("%d", &n);    for (i = 0; i < n; i++)    {        scanf("%d", &s[i].b);    }    for (i = 0; i < n; i++)    {        s[i].k = 1;    }    for (i = 0; i < n - 1; i++)    {        for (j = i + 1; j < n; j++)        {            if (s[j].b > s[j - 1].b)            {                s[i].k++;            }            else            {                break;            }        }    }    /*for(i=0;i<n;i++)             printf("%d",s[i].k);*/    for (i = 0; i < n; i++)    {        if (s[i].k > maxi)        {            maxi = s[i].k;            c = i;        }    }    //printf("%d %d\n", c, maxi);    for (i = c; i < c + maxi-1; i++)    {        printf("%d ", s[i].b);    }    printf("%d\n", s[c+maxi-1].b);}


2 0
原创粉丝点击