给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。
输入格式:
输入第1行给出正整数n(<=10e5);
第2行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。
输入样例:
15
1 9 2 5 7 3 4 6 8 0 11 15 17 17 10
输出样例:
3 4 6 8
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int num;
int length;
} Sqlist[100001];
int main()
{
int n, i, j;
scanf("%d", &n);
Sqlist L;
int max = 1;
int maxi = 0;
for(i = 0; i < n; i++)
{
scanf("%d", &L[i].num);
L[i].length = 1;//L.length存储从该位置开始的递增序列的长度
}
for(i = 0; i < n - 1; i += L[i].length)
{
for(j = i + 1; j < n; j++)
{
if(L[j].num > L[j - 1].num)
{
L[i].length++;
}
else
{
break;
}
}
if(L[i].length > max)
{
max = L[i].length;//max记录最长递增序列的长度
maxi = i;//maxi记录最长递增序列的起始位置
}
}
for(i = maxi; i < maxi + max - 1; i++)
{
printf("%d ", L[i].num);
}
printf("%d", L[i].num);
return 0;
}