当前位置: 首页 > java >正文

华为高频算法题:最长连续递增子序列(Longest Continuous Increasing Subsequence)

文章目录

    • 前言
    • 题目描述(华为校招真题)
    • 解题思路分析
    • Java 实现代码
    • 单元测试代码
    • 结语

前言

在各大互联网公司的算法面试中,数组类题目一直是考察的重点,尤其是对于应届生和初级工程师的面试来说更是常见题型。华为作为国内顶尖的科技企业,在校招和社招中也经常考察这类基础但极具代表性的题目。本题“最长连续递增子序列”是一道典型的数组遍历与状态维护问题,虽然难度适中,但却能很好地考察候选人对边界条件的处理能力、逻辑思维的严谨性以及代码的简洁性和可读性。

在这里插入图片描述

题目描述(华为校招真题)

给定一个无重复元素的整数数组 nums,返回最长连续递增子序列的长度。
连续递增子序列定义为:数组中连续的一段元素 [i, i+1, i+2, …, j],满足 nums[i] < nums[i+1] < … < nums[j]。
示例:

输入: nums = [1,3,5,4,7]
输出: 3
解释: 最长的连续递增子序列是 [1, 3, 5],长度为 3。输入: nums = [2,2,2,2]
输出: 1
解释: 每个元素都是独立的递增序列。

解题思路分析

我们可以采用一次遍历的方式解决该问题
1、初始化两个变量maxLength(记录最长递增序列的长度)、currentLength(当前递增序列的长度);
2、从第二个元素开始遍历数组如果当前元素大于前一个元素,则 currentLength++,否则重置 currentLength = 1,每次更新 maxLength;
3、算法时间复杂度:O(n),空间复杂度:O(1)

Java 实现代码

/*** LongestContinuousIncreasingSubsequence* @author senfel* @version 1.0* @date 2025/7/23 11:54*/
public class LongestContinuousIncreasingSubsequence {/*** findLengthOfLCIS* @param nums* @author senfel* @date 2025/7/23 11:55 * @return int*/public int findLengthOfLCIS(int[] nums) {// 验证是否为空if (nums == null || nums.length == 0) {return 0;}//最长递增序列的长度int maxLength = 1;//当前递增序列的长度int currentLength = 1;for (int i = 1; i < nums.length; i++) {if (nums[i] > nums[i - 1]) {currentLength++;maxLength = Math.max(maxLength, currentLength);} else {currentLength = 1;}}return maxLength;}
}

单元测试代码

/*** LongestContinuousIncreasingSubsequenceTest* @author senfel* @version 1.0* @date 2025/7/23 12:02*/
public class LongestContinuousIncreasingSubsequenceTest {private final LongestContinuousIncreasingSubsequence solution = new LongestContinuousIncreasingSubsequence();@Testpublic void testBasicCase1() {int[] nums = {1, 3, 5, 4, 7};assertEquals(3, solution.findLengthOfLCIS(nums));}@Testpublic void testAllSameElements() {int[] nums = {2, 2, 2, 2};assertEquals(1, solution.findLengthOfLCIS(nums));}@Testpublic void testEmptyArray() {int[] nums = {};assertEquals(0, solution.findLengthOfLCIS(nums));}@Testpublic void testSingleElement() {int[] nums = {5};assertEquals(1, solution.findLengthOfLCIS(nums));}@Testpublic void testFullyIncreasing() {int[] nums = {1, 2, 3, 4, 5};assertEquals(5, solution.findLengthOfLCIS(nums));}@Testpublic void testMultipleSegments() {int[] nums = {1, 2, 5, 3, 4, 6, 2, 3, 4, 5};assertEquals(4, solution.findLengthOfLCIS(nums));}
}

结语

这道题是华为校招中常考的基础算法题之一,虽然难度不高,但能考察候选人的代码简洁性、边界处理能力、单元测试意识等多方面素质。建议大家在练习时不仅要写出正确代码,在实际的面试过程中注意编写完整的单元测试,并考虑边界情况(空数组、单个元素、全等元素)尽量写出可读性强的代码。

http://www.xdnf.cn/news/16097.html

相关文章:

  • AI黑科技:GAN如何生成逼真人脸
  • vector【上】
  • 大模型就业方向
  • Log4j CVE-2021-44228 漏洞复现详细教程
  • 【lucene】实现knn
  • Git 完全手册:从入门到团队协作实战(4)
  • DP系列2【01背包】洛谷 P1049 [NOIP 2001 普及组] 装箱问题题解
  • 构建高性能推荐系统:MixerService架构解析与核心实现
  • K8s:离线部署Kubernetes1.26.12及采用外部Harbor
  • .net core接收对方传递的body体里的json并反序列化
  • P5535 【XR-3】小道消息
  • 【MyBatis-Plus】核心开发指南:高效CRUD与进阶实践
  • 83、设置有人DTU设备USR-M100采集传感器数据,然后上传阿里云服务
  • 【音视频学习】五、深入解析视频技术中的像素格式:颜色空间、位深度、存储布局
  • CodeBuddy IDE实战:用AI全栈能力快速搭建课程表网页
  • 借助Aspose.HTML控件,使用 Python 编程将网页转换为 PDF
  • Object Sense (OSE):一款从编辑器脚本发展起来的编程语言
  • 优化:Toc小程序猜你喜欢功能
  • Java 堆(优先级队列)
  • AI 及开发领域动态与资源汇总(2025年7月23日)
  • 编程语言Java——核心技术篇(二)类的高级特性
  • 逆向入门(41)程序逆向篇-crackme
  • OceanBase数据库
  • 设备虚拟化技术
  • 从零开始学习Dify-Excel数据可视化(四)
  • Rocky9部署Zabbix7(小白的“升级打怪”成长之路)
  • 【bug】websocket协议不兼容导致的一个奇怪问题
  • (46)elasticsearch-华为云CCE无状态负载部署
  • #Linux内存管理# 在一个播放系统中同时打开几十个不同的高清视频文件,发现播放有些卡顿,打开视频文件是用mmap函数,请简单分析原因。
  • MCU芯片AS32S601在卫星光纤放大器(EDFA)中的应用探索