51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

给定一个数组,例如[5, 1, 3, 4, 2],请设计算法找出最长连续递增子序列的长度,要求时间复杂度为O(n),并说明算法思路。

信步科技研发难度:中等

答案

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) 【对比与适用场景】:

  • 方法:线性扫描(动态规划简化版)
  • 时间复杂度:O(n),遍历数组一次
  • 空间复杂度:O(1),仅用常数额外空间
  • 适用场景:所有长度为n的数组,尤其适用于大规模数据(如n达百万级),无需额外存储子序列本身,仅记录长度。

4) 【示例】:
数组arr = [5, 1, 3, 4, 2],初始化currentLength = 1,maxLength = 1。

  • 遍历i=0(5):currentLength=1,maxLength=1。
  • i=1(1):1 < 5,currentLength=1,maxLength=1。
  • i=2(3):3 > 1,currentLength=2,maxLength=2。
  • i=3(4):4 > 3,currentLength=3,maxLength=3。
  • i=4(2):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) 【追问清单】:

  • 问:空间复杂度是多少?
    答:O(1),仅使用了两个变量来记录当前和最大长度。
  • 问:如果数组为空或只有一个元素,结果如何?
    答:返回1,因为单个元素本身就是一个递增序列(或空数组返回0,需根据定义调整,但通常单个元素长度为1)。
  • 问:如果数组元素相同,比如[2,2,2],结果是多少?
    答:当前长度始终为1,最长长度为1,因为2不大于前一个2,递增中断。
  • 问:是否考虑了非连续的子序列?
    答:题目要求“连续”,所以必须比较相邻元素,非连续子序列不适用此方法。

7) 【常见坑/雷区】:

  • 初始值错误:若将currentLength和maxLength初始化为0,会导致第一个元素计算错误(如5会被算作长度0)。
  • 比较条件错误:用>=代替>,会导致长度计算错误(如[1,1]会被算作长度2,实际应为1)。
  • 未更新最大长度:只在当前递增时更新maxLength,若递增中断后未更新,会导致结果错误。
  • 忽略边界情况:未处理数组第一个元素或空数组的情况,可能导致逻辑错误。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1