给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(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
#include <stdio.h>
int main()
{
int n;
scanf("%d\n",&n);
int A[n];
int B[n];//注意:存储每个位置开始的最长连续递增子序列
int i=0,j;
int x=0,y=-1;//注意:x是长度,y是x的对应下标
for(i=0;i<n;i++){
scanf("%d ",&A[i]);
B[i] = 1;//将每个位置开始的最长连续递增子序列数目设置为1(因为其本身算一个)
}
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(A[j]>A[j-1]){
B[i]++;//计算A数组每个从i开始的最长连续子序列数目
}else{
break;
}
}
}
for(i=0;i<n;i++){
if(B[i]>x){//找出最长的长度x和其下标y
x = B[i];
y = i;
}
}
for(i=y;i<y+x;i++){
if(i==y){
printf("%d",A[i]);
}else{
printf(" %d",A[i]);
}
}
/*另外一种输出方法
printf("%d",A[y]);
for(i=y+1;i<y+x;i++){
printf(" %d",A[i]);
}*/
return 0;
}