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

最长连续序列的长度LongestConsecutive

问题

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums = [100,4,200,1,3,2] 输出:4 解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。 示例 2: 输入:nums = [0,3,7,2,5,8,4,6,0,1] 输出:9 示例 3: 输入:nums = [1,0,1,2] 输出:3

解法

这个问题可以通过使用哈希表(Python 中的set)来解决。核心思想是遍历数组,对于每个元素,检查它减一的元素是否存在于哈希表中,如果存在,则表示找到了一个连续序列的起点,然后继续检查下一个元素是否存在,直到序列被打断。

class Solution: def longestConsecutive(self, nums: List[int]) -> int: # 初始化最长连续序列长度为0 longest_streak = 0 # 将列表转换为集合,以便快速检查元素是否存在 num_set = set(nums) # 遍历集合中的每个数字 for num in num_set: # 如果当前数字的前一个数字不在集合中,说明找到了一个序列的起点 if num - 1 not in num_set: current_num = num current_streak = 1 # 当前一个数字不存在,当前数字序列长度初始化为1 # 从当前数字开始,检查下一个数字是否存在于集合中 while current_num + 1 in num_set: current_num += 1 # 如果存在,更新当前数字为下一个数字 current_streak += 1 # 序列长度加1 # 更新最长连续序列长度 longest_streak = max(longest_streak, current_streak) # 返回最长连续序列长度 return longest_streak

实现步骤:

  1. 定义一个变量longest_streak来存储遍历过程中找到的最长连续序列的长度,初始值设为 0。
  2. 将输入列表nums转换成集合num_set,这样可以通过 O(1) 时间复杂度检查任意数字是否存在于集合中。
  3. 遍历集合num_set中的每个数字,对于每个数字,检查其前一个数字(num - 1)是否存在于集合中。如果不存在,说明找到了一个连续序列的起点。
  4. 从找到的起点开始,通过while循环检查序列中的下一个数字是否存在于集合中,如果存在,则更新当前数字并增加序列长度。
  5. 在每次找到一个新的连续序列后,比较并更新longest_streak变量的值。
  6. 遍历完成后,返回longest_streak变量的值,即最长连续序列的长度。

复杂度分析

  • 时间复杂度:O(N),其中 N 是数组nums的长度。因为每个元素最多被访问两次(一次在初始化num_set时,一次在主循环中)。
  • 空间复杂度:O(N),用于存储哈希表。
http://www.jsqmd.com/news/402054/

相关文章:

  • 基于Agent智能客服的高效对话系统架构设计与性能优化实战
  • 美妆机保健食品行业包装漏封率降低80%的AI解决方案 - 宏洛图品牌设计
  • ChatGPT模型详解:AI辅助开发中的核心原理与实战优化
  • Java打造:预约停车畅停无忧的智能之选
  • 视频孪生之上:镜像视界三维空间计算体系核心技术壁垒与不可替代性白皮书
  • 开源智能客服系统架构解析:从高并发设计到生产环境最佳实践
  • 大模型在智能客服降本增效实战:从架构设计到生产环境部署
  • 值得关注的5家百度SEO优化公司盘点推荐
  • 基于SpringBoot + Vue的毕设项目实战:从零搭建高内聚低耦合的全栈架构
  • 基于Java:畅停无忧预约停车系统来袭
  • Java助力:约停随行畅享便捷停车生活
  • 施工组织设计毕业设计:从技术选型到工程实践的完整指南
  • Chainlit Prompt设置实战:如何高效构建AI对话应用
  • 低空应用商业模式发展分析报告
  • 刚刚,CVPR 2026正式放榜!超16000篇投稿,3/4被拒
  • Cherry Studio本地大模型实战:语音输入输出全链路实现方案
  • ComfyUI提示词翻译插件开发实战:从原理到效率优化
  • Amesim-可以用于汽车热管理计算软件
  • 尸体
  • 探索Comsol仿真纳米孔阵列结构超表面的透射谱
  • ICLR‘26开源 | 加速SAM2!中科院Efficient-SAM2:更快更强的分割一切!
  • 2014-2025年全国监测站点的逐月空气质量数据(15个指标\Excel\Shp格式)
  • Chatbot切片策略解析:如何处理标点符号切片的边界问题
  • Chatbot 开发者出访地址实战:高并发场景下的架构设计与性能优化
  • 寒集训祭Day1圆方树
  • openclaw大模型token消耗问题
  • 2D+3D点云融合封神!ANY3D-VLA让机器人操作准确率冲到93.3%!
  • Win-ChatTTS-UI v1.0.7z 本地一键安装指南:从环境配置到高效部署
  • 清理Git已合并分支:源自CIA泄露的开发文档的一行命令
  • docker NGS生信实践