给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。
输入格式:
输入第1行给出正整数n(≤105);第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>
#define LIST_SIZE 100000
int main()
{
int list[LIST_SIZE];
int maxpoint = 0,maxlen = 0;//记录最长索引和最长序列长度
int point = 0,len = 0;//记录子列的开始位置和长度
int n,i = 0;
scanf("%d",&n);
for(i = 0;i<n;i++)
{
scanf("%d",&list[i]);
}
i = 0;
while(i < n)
{
if(i == LIST_SIZE - 1)
{
break;
}
if(list[i] >= list[i+1]) //不为递增
{
point = i+1;
len = 0;
i++;
}
else{
len++;
i++;
}
if(maxlen < len)
{
maxlen = len;
maxpoint = point;
}
}
for(i = maxpoint;i<=maxpoint+maxlen-1;i++)
{
printf("%d ",list[i]);
}
printf("%d",list[maxpoint+maxlen]);
return 0;
}