1-9 最长连续递增子序列 (20分)(好难?)
程序员文章站
2022-06-08 08:12:30
...
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(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
这道题好难。。倒不是思路难想,就是测试点和对一些测试的数据处理的不好,改了一些测试点,改一回多两分,最后全顺序还是在别人的帮助下找出的,唉,20分的题,按理说不应该被卡的这么惨,但事实就是这样。它只是说了n的范围,没说输入的整数的范围,防止麻烦,我一开始就直接定义了long long类型
#include <iostream>
using namespace std;
typedef long long ll;
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int n;
cin >> n;
ll a[n];
for(int i = 0;i<n;i++){
cin >> a[i];
}
if(n==1){
cout << a[0];
return 0;
}
int maxn = -1;
int start,end;
for(int i = 0;i<n;i++){
int len = 0;
for(int j = i+1;j<n;j++){
if(a[j]>a[j-1]){
len++;
if(j == n-1){
for(int k = i;k<=j;k++){
cout << a[k];
if(k<j)
cout <<" ";
}
return 0;
}
} else{
if(len>maxn){
maxn = len;
start = i;
end = j-1;
}
break;
}
}
}
for(int i = start;i<=end;i++){
cout << a[i];
if(i<end)
cout <<" ";
}
return 0;
}