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

【Hot 100 刷题计划】 LeetCode 128. 最长连续序列 | C++ 哈希表 O(N) 题解

LeetCode 128. 最长连续序列 | C++ Set 与哈希表 O(N) 双解法题解

📌 题目描述

题目级别:中等

给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为O(N)O(N)O(N)的算法解决此问题。

  • 示例:
    输入:nums = [100, 4, 200, 1, 3, 2]
    输出:4
    解释:最长数字连续序列是[1, 2, 3, 4]。它的长度为 4。

🚀 解法一:使用 Set 自动去重排序 (思路直观)

最直观的想法是:如果数组是有序的,我们只需要遍历一遍就能找出最长连续序列。
我们可以利用 C++ 中的set,它底层基于红黑树,不仅能自动去重,还能自动排序。将所有元素塞入set后,直接遍历寻找连续段即可。

💻 C++ 代码实现

classSolution{public:intlongestConsecutive(vector<int>&nums){if(nums.empty())return0;set<int>se;// 1. 将所有数字插入 set 中,完成自动排序和去重for(inti=0;i<nums.size();i++){se.insert(nums[i]);}intres=0,cnt=1,fr=-1,fl=1;// 2. 遍历有序集合,寻找连续序列for(autott:se){if(fl){fl=0;res=1;}elseif((tt-fr)==1){// 如果当前数字和前一个数字连续cnt++;res=max(res,cnt);}else{// 如果断开了,重新开始计数cnt=1;}fr=tt;// 更新前一个数字}returnres;}};

🏆 解法二:哈希表 + 智能跳过 (真正的 O(N) 面试最优解)

要想把时间复杂度压榨到O(N)O(N)O(N),我们必须放弃排序,借助哈希表(unordered_set)来实现O(1)O(1)O(1)的快速查找。
核心破局点:怎么找才不会超时?
如果我们把所有数字放入哈希表,然后对每个数字都盲目地往后找(比如对于 3 找 4,5,6,对于 2 又找 3,4,5),最坏情况下会退化成O(N2)O(N^2)O(N2)。优化的灵魂在于:“只从序列的开头开始匹配!”怎么判断一个数字是不是“序列的开头”?很简单:看它的前一个数字存不存在。

  • 如果 num - 1 在哈希表里,说明 num 只是某个序列的中间节点,直接跳过它!
  • 如果 num - 1 不在哈希表里,说明 num
    就是一个全新序列的开头。我们以它为起点,放心地往后找 num+1, num+2…,并记录长度。

💻 进阶 C++ 代码实现

classSolution{public:intlongestConsecutive(vector<int>&nums){// 将所有数字放入 unordered_set 中,实现 O(1) 的查找并去重unordered_set<int>hash(nums.begin(),nums.end());intres=0;// 遍历哈希表中的每一个数字for(intnum:hash){// 核心剪枝逻辑:如果 num - 1 存在,说明 num 不是序列起点,直接跳过if(!hash.count(num-1)){// 此时 num 是一个新序列的起点intcurrentNum=num;intcurrentStreak=1;// 顺藤摸瓜,不断在哈希表中寻找下一个连续的数字while(hash.count(currentNum+1)){currentNum+=1;currentStreak+=1;}// 更新全局最长序列长度res=max(res,currentStreak);}}returnres;}};
http://www.jsqmd.com/news/582695/

相关文章:

  • 强强联合:在快马平台用AI模型驱动你的下一代智能agent应用
  • 2026年安全型高端床垫推荐:五家优选品牌深度解析 - 科技焦点
  • GEE 案例:BAP(Best Available Pixel)算法实现landsat数据的像素级融合弥补影像空缺
  • FALCON: Fast Autonomous Aerial ExplorationUsing Coverage Path Guidance(覆盖路径引导的快速自主空中探索)
  • 如何快速实现屏幕文本翻译:开源工具的终极指南
  • 当 95% 泳池拒绝轮椅人群时,“泳池升降机” 正在创造包容性蓝海​
  • 2026主任护师机构通过率榜单TOP3:实测高通过率机构推荐 - 医考机构品牌测评专家
  • EasyAnimateV5图生视频模型实战:打造个人短视频内容创作工具
  • Spring循环依赖:深入剖析与高效解决方案
  • PAT 乙级 1049
  • Delphi经典8大天坑|第五篇:ShortString与String混用,导致字符串截断/乱码
  • cv_unet_image-colorization图像上色入门必看:纯本地运行无网络依赖实操手册
  • 千问3.5-2B保姆级教程:网页端错误提示(fast path不可用等)含义与应对策略
  • Hyper-V设备直通图形化解决方案:让硬件性能释放不再复杂
  • 33、【Agent】【OpenCode】本地代理(智能适配层)
  • 2026卫生高级职称考试哪个题库好?教育博主实测3款热门题库榜单 - 医考机构品牌测评专家
  • Nunchaku-FLUX.1-dev开源镜像部署教程:免编译、免依赖、一键拉起服务
  • Pixel Aurora Engine应用场景:复古游戏机主题网站AI生成视觉系统集成
  • 实例 10:浮力与潜水艇模拟
  • PDFKit核心源码分析:揭秘HTML到PDF的转换魔法
  • 测试计划详细说明
  • **发散创新:基于Go语言的协同计算框架设计与实践**在现代分布式系统中,**
  • Lychee-Rerank+Qwen2.5-1.5B部署指南:纯本地检索重排序保姆级教程
  • ai辅助开发:智能诊断与生成个性化jdk配置方案的快马平台实践
  • nlp_gte_sentence-embedding_chinese-large模型在嵌入式Linux系统上的优化部署
  • cv_unet_image-colorization多分辨率适配实测:手机扫描件/胶片扫描图效果对比
  • OpenClaw安装碰到的一些问题和解决方法
  • 2026 年4月最新推荐:副主任医师备考机构口碑 Top 3 - 医考机构品牌测评专家
  • AI技术原理--AI Token是什么:10分钟搞懂大模型基础单位
  • 传奇游戏服务器搭建终极指南:OpenMir2从零到精通