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

LeetCode 128. Longest Consecutive Sequence 题解

LeetCode 128. Longest Consecutive Sequence 题解

题目描述

给定一个未排序的整数数组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

解题思路

方法:哈希表

思路

  • 使用哈希表来存储数组中的所有元素,这样可以在 O(1) 的时间内判断一个元素是否存在
  • 遍历数组中的每个元素:
    • 如果当前元素是一个连续序列的起点(即current - 1不在哈希表中),则开始计算以当前元素为起点的连续序列的长度
    • 不断检查current + 1是否在哈希表中,如果在,继续增加长度
    • 更新最长连续序列的长度

复杂度分析

  • 时间复杂度:O(n),其中 n 是数组的长度。每个元素最多被访问两次。
  • 空间复杂度:O(n),其中 n 是数组的长度。需要使用哈希表来存储元素。

代码实现

方法:哈希表

class Solution: def longestConsecutive(self, nums: List[int]) -> int: if not nums: return 0 # 使用哈希表存储数组中的所有元素 num_set = set(nums) longest_streak = 0 for num in num_set: # 如果当前元素是一个连续序列的起点(即 num - 1 不在哈希表中) if num - 1 not in num_set: current_num = num current_streak = 1 # 不断检查 current_num + 1 是否在哈希表中 while current_num + 1 in num_set: current_num += 1 current_streak += 1 # 更新最长连续序列的长度 longest_streak = max(longest_streak, current_streak) return longest_streak

测试用例

测试用例 1:

输入:nums = [100,4,200,1,3,2]
输出:4

测试用例 2:

输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

测试用例 3:

输入:nums = []
输出:0

测试用例 4:

输入:nums = [1]
输出:1

总结

本题是哈希表的经典应用问题,主要考察对哈希表的理解和使用。通过使用哈希表,我们可以在 O(1) 的时间内判断一个元素是否存在,从而高效地找到最长连续序列。

哈希表的核心思想是:将数组中的所有元素存储在哈希表中,然后遍历每个元素,当遇到一个连续序列的起点时,计算该连续序列的长度,并更新最长连续序列的长度。

这种方法不仅适用于最长连续序列问题,还可以应用于许多其他需要快速查找元素的问题。掌握哈希表的使用,对于解决这类问题非常重要。

http://www.cnnetsun.cn/news/1628495.html

相关文章:

  • cadence设置叠层
  • 实测阿里造相Z-Image-Turbo:8步生成惊艳图片,新手友好WebUI体验
  • 告别foobar2000界面痛点:foobox-cn如何3步打造沉浸式音乐体验
  • ML-Decoder实战:如何用这个万能分类头提升你的多标签分类模型性能(附代码)
  • 手把手教你用UML用例图梳理业务流程(附真实项目案例)
  • Wireshark抓包实战:用一道CTF题彻底搞懂IP分片与UDP重组
  • MySQL日期类型选择指南:告别纠结,选对类型
  • 别再只调参了!深入WDCNN第一层宽卷积核:为什么它对振动信号诊断这么有效?
  • 深入解析UDS协议中的0x28通讯控制服务
  • AI梯度下降与交叉熵损失的核心思想解析
  • 别只跑Demo了!用Qwen2-VL-7B-Instruct模型打造你的本地多模态AI助手:从图片分析到文档问答
  • 收藏!AI时代高薪抢人大战,普通程序员如何不被裁,抓住升薪机遇?
  • 3步实现高效转换:让专业排版效率提升80%的开源解决方案
  • 如何用Mermaid Live Editor 5分钟创建专业图表
  • MedGemma-X优化升级:如何配置systemd服务实现开机自启与崩溃自愈
  • PyTorch 2.8镜像实战指南:基于FFmpeg 6.0的视频I/O性能优化与GPU硬编解码
  • 从“对话”到“执行”:OpenClaw龙虾在物业行业的深度应用场景解析
  • 使用快马平台基于OpenSpec一键生成可运行API原型,加速接口设计验证
  • 赋能商贸流通:如何甄选好用的订货管理系统助力企业增长
  • 【可分离架构物理信息神经网络:破解维度灾难的分离变量方法论】第3章 张量分解PINN:CP、TT与Tucker架构
  • comfyui_controlnet_aux功能异常修复实用指南:从诊断到预防的完整解决方案
  • Ubuntu22.04系统共存Openssl多版本:从3.0.2升级到3.1.4的编译与配置实战
  • 终极中文语义理解指南:text2vec-base-chinese如何让AI真正读懂中文
  • Flow.js源码深度解析:分块算法、上传策略与事件系统的实现原理
  • LabVIEW | 串口通信从入门到实战【避坑指南】
  • 2026年三维扫描仪市场:这五家厂商为何能持续引领行业风潮?
  • 自动化补丁集成解决系统部署难题:Win_ISO_Patching_Scripts的高效解决方案
  • 猫抓:智能浏览器资源嗅探工具,高效捕获网页媒体资源的终极解决方案
  • CosyVoice:零代码实现专业级语音合成的终极指南
  • 【限时解密】某金融核心系统Java协议解析模块源码(含ASN.1/X.509/TCP自定义协议三重解析引擎)