给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(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
用startIndex
和endIndex
记录最大子序列的起始下标和结束下标就可以了。
在遍历过程中用两个临时变量记录下每个连续递增子序列的起始下标和结束下标,跟startIndex
和endIndex
的差做对比。如果找到新的最大连续递增子序列就替换一下startIndex
和endIndex
。
#include<stdio.h>
int main(){
int size,startIndex=0,endIndex=0;
scanf("%d",&size);
int arr[size];
for(int i=0;i<size;i++)
scanf("%d",&arr[i]);
for(int i=0;i<size-1;i++){
int startTemp=i, endTemp=i;
while(arr[i]<arr[i+1]){
endTemp++;
i++;
}
if(endIndex-startIndex<endTemp-startTemp){
endIndex=endTemp;
startIndex=startTemp;
}
}
for(int i=startIndex;i<=endIndex;i++){
if(i==startIndex)
printf("%d",arr[i]);
else
printf(" %d",arr[i]);
}
return 0;
}