news 2026/8/1 8:13:02

最长连续序列的长度LongestConsecutive

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
最长连续序列的长度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),用于存储哈希表。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/21 6:06:50

Chatbot切片策略解析:如何处理标点符号切片的边界问题

在构建一个能流畅对话的Chatbot时,我们往往把注意力集中在模型选择、意图识别和对话管理上。但有一个看似基础、实则至关重要的环节,常常被忽视,那就是文本切片策略。尤其是在处理用户输入或长文档时,如何将文本合理地“切”成一段…

作者头像 李华
网站建设 2026/7/21 6:07:01

Chatbot 开发者出访地址实战:高并发场景下的架构设计与性能优化

背景痛点:高并发下的地址服务之困 在构建面向全球用户的Chatbot服务时,出访地址查询是一个看似简单却至关重要的基础功能。无论是用于个性化问候、时区判断,还是基于地理位置的内容推荐,快速、准确地获取用户IP对应的出访地址信息…

作者头像 李华
网站建设 2026/7/21 6:07:02

ChatGPT奶奶漏洞解析:新手必知的安全防护与最佳实践

ChatGPT奶奶漏洞解析:新手必知的安全防护与最佳实践 最近在AI应用开发圈里,一个被称为“奶奶漏洞”的安全问题引起了广泛讨论。对于刚接触大语言模型应用开发的新手来说,这既是一个需要警惕的风险,也是一个理解AI安全性的绝佳案例…

作者头像 李华
网站建设 2026/7/21 6:07:00

基于深度学习毕业设计开源:从模型训练到部署的实战全流程

最近在帮学弟学妹们看毕业设计,发现一个挺普遍的现象:大家对深度学习理论学得不错,一到动手做项目,从训练到部署,各种“坑”就冒出来了。环境配不起来、模型训不动、代码写成一团乱麻、最后不知道怎么把模型变成能用的…

作者头像 李华
网站建设 2026/7/21 6:07:02

基于Java:打造畅享无忧的旅游服务平台

基于Java:打造畅享无忧的旅游服务平台引言在旅游行业蓬勃发展的当下,消费者对于旅游服务的需求日益多样化和个性化,期望能够获得一站式、便捷且无忧的旅游体验。Java作为一种成熟、稳定且功能强大的编程语言,凭借其跨平台性、高并…

作者头像 李华