PTA(顺序表)2-3 最长连续递增子序列
PTA(顺序表)2-3 最长连续递增子序列
zhangzhang2-3 最长连续递增子序列
分数 6
作者 DS课程组
单位 浙江大学
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。
输入格式:
输入第1行给出正整数n(≤105);第2行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。
输入样例:
1 | 15 |
输出样例:
1 | 3 4 6 8 |
答案
1 |
|
Summary
“线性遍历 + 状态实时记录” 的思路查找最长连续递增子序列,核心逻辑符合问题需求,且时间复杂度为 O (n)(仅遍历一次序列),是高效的解决方案,具体可拆解为 3 步:
状态初始化:用
start记录当前递增子序列的起始下标,current_length记录当前子序列长度(初始为 1,因单个元素也是子序列);用best_start/best_end记录最长子序列的起止下标,max_length记录其长度。线性遍历判断
:遍历序列时,对比当前元素与下一个元素:
- 若递增(
L.data[i] < L.data[i+1]),则当前子序列长度current_length加 1; - 若不递增,重置
start为下一个元素下标,current_length重新记为 1(开启新的子序列统计)。
- 若递增(
实时更新最长子序列:每次遍历后,若当前子序列长度超过
max_length,则更新max_length及最长子序列的起止下标,确保始终记录当前找到的最长子序列。
之前错误点
- 错误点:
max_length初始值设为 0,不符合 “子序列最小长度为 1” 的客观事实(即使序列只有 1 个元素,子序列长度也为 1)。


