
1) 【一句话结论】:通过一次线性遍历数组,维护当前递增序列长度和最长长度,时间复杂度为O(n),空间复杂度为O(1),可高效求解最长连续递增子序列的长度。
2) 【原理/概念讲解】:首先明确“连续递增子序列”是指数组中一段连续的子数组,其中每个元素严格大于前一个元素(如[1,3,4]是,[5,1,3,4,2]中[1,3,4]长度为3)。算法核心是线性扫描:遍历数组时,用currentLength记录当前连续递增的长度,maxLength记录最大长度。当arr[i] > arr[i-1]时,currentLength加1(延续递增),否则重置为1(递增中断,重新开始)。由于每个元素仅处理一次,时间复杂度O(n),空间仅用两个变量,复杂度O(1)。类比:就像走阶梯,每一步若比前一步高就继续,否则重新开始,记录最长的步数。
3) 【对比与适用场景】:
4) 【示例】:
数组arr = [5, 1, 3, 4, 2],初始化currentLength = 1,maxLength = 1。
currentLength=1,maxLength=1。1 < 5,currentLength=1,maxLength=1。3 > 1,currentLength=2,maxLength=2。4 > 3,currentLength=3,maxLength=3。2 < 4,currentLength=1,maxLength=3。maxLength=3,即最长连续递增子序列为[1,3,4](或[3,4]),长度为3。5) 【面试口播版答案】:
面试官您好,我会用一次线性遍历的思路解决。首先,定义两个变量:currentLength表示当前连续递增的长度,maxLength表示最长长度,初始都为1。然后遍历数组,对于每个元素,若它大于前一个元素,currentLength加1,否则重置为1。每次更新maxLength为currentLength和maxLength的最大值。这样整个数组只遍历一次,时间复杂度O(n),空间O(1)。以示例数组[5,1,3,4,2]为例,遍历过程中,当遇到3时,当前长度变为2;遇到4时变为3;遇到2时重置为1,最终最长长度为3,所以最长连续递增子序列的长度是3。
6) 【追问清单】:
7) 【常见坑/雷区】:
currentLength和maxLength初始化为0,会导致第一个元素计算错误(如5会被算作长度0)。>=代替>,会导致长度计算错误(如[1,1]会被算作长度2,实际应为1)。maxLength,若递增中断后未更新,会导致结果错误。