尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
3 最长连续序列
给定一个未排序的整数数组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方法1快排1、使用sort函数对nums进行排序(默认升序)nlogn。2、循环nums向量下标定义为i定义连续长度变量为k1和最大长度max_k判断nums[i]和nums[i1]是否连续。3、假如前后两个数字连续k1并且判断k是否大于max_k更新max_k。4、假如前后两个数字相等直接跳过本次循环。5、如果两个数字不连续更新k为14、持续循环nums向量直到结束返回max_k。class Solution { public: int longestConsecutive(vectorint nums) { //集合 int nnums.size(); if(n2) return n; unordered_setint mset; for(int i0;in;i){ mset.insert(nums[i]); } int k1; int max_kk; for(unordered_setint::iterator itmset.begin();it!mset.end();it){ if(mset.find(*it-1)mset.end()){ int num*it; while(1){ if(mset.find(num1)!mset.end()){ k; max_kmax_kk?max_k:k; num; }else{ k1; break; } } } } return max_k; } };方法2哈希查找1、创建一个set集合unordered_setintm_set定义连续的长度为k,最大长度为max_k。2、将nums的数全部插入m_set中。3、循环m_set容器的值定义每个值为it。4、在m_set容器中查找it的连续数字每找到一个k1更新max_k。5、循环结束 返回 max_k。该方法在最坏的情况下还是会达到O(n^2)的复杂度//假如有一个连续序列{987654321} 那么一次枚举都要从最大的那个数开始枚举最坏的情况时间复杂度O(n^2)优化方法//如果已知有一个 x,x1,x2,⋯,xy 的连续序列 而我们却重新从 x1x2 或者是 xy 处开始尝试匹配 那么得到的结果肯定不会优于枚举 x 为起点的答案 因此我们在外层循环的时候碰到这种情况跳过即可。 //由于我们要枚举的数 x 一定是在数组中不存在前驱数 x−1 的 不然按照上面的分析我们会从 x−1 开始尝试匹配 因此我们每次在哈希表中检查是否存在 x−1 即能判断是否需要跳过了。class Solution { public: int longestConsecutive(vectorint nums) { //集合 int nnums.size(); if(n2) return n; unordered_setint mset; for(int i0;in;i){ mset.insert(nums[i]); } int k1; int max_kk; for(unordered_setint::iterator itmset.begin();it!mset.end();it){ if(mset.find(*it-1)mset.end()){ int num*it; while(1){ if(mset.find(num1)!mset.end()){ k; max_kmax_kk?max_k:k; num; }else{ k1; break; } } } } return max_k; } };unordered_set常见函数函数作用std::unordered_setint uset;构造函数std::unordered_setint uset;插入元素uset.find(10);查找元素返回一个迭代器uset.erase(10);删除元素size_t size uset.size();返回容器的大小bool isEmpty uset.empty();判断容器是否为空uset.clear();清空容器
RELATED

相关推荐

Java大厂面经:Spring Cloud微服务+MCP+Agentic RAG三连问,水货程序员谢飞机大型翻车现场

Java大厂面经:Spring Cloud微服务+MCP+Agentic RAG三连问,水货程序员谢飞机大型翻车现场

Java大厂面经:Spring Cloud微服务MCPAgentic RAG三连问,水货程序员谢飞机大型翻车现场🎬 前言江湖传闻,有一号人物,姓谢,名飞机,Java圈内人称「八股文朗诵艺术家」——简单问题倒背如流&#xf…

📅 2026/9/7 22:34:18
鸿蒙 ArkTS 实战:Live Stream Script Helper 从智能助手到保存闭环完整解析

鸿蒙 ArkTS 实战:Live Stream Script Helper 从智能助手到保存闭环完整解析

鸿蒙 ArkTS 实战:Live Stream Script Helper 从智能助手到保存闭环完整解析 前言 Live Stream Script Helper 是一个面向 直播脚本助手 的鸿蒙 ArkTS 单页工具。它把主题输入、数量统计、辅助开关、备注和保存状态组织到一个移动端工作台中。 项目服务于 围绕商品…

📅 2026/9/9 14:34:31
HeyGem2.0(Duix-Avatar)本地数字人整合包技术部署与使用完整教程

HeyGem2.0(Duix-Avatar)本地数字人整合包技术部署与使用完整教程

前言 HeyGem(项目现更名 Duix-Avatar)是硅基智能开源 AI 数字人项目,可本地离线完成数字人形象、音色克隆与口播视频生成。原版开源项目依赖 Docker、WSL2 环境部署,国内网络环境下易出现拉取镜像失败、环境配置复杂等问题。社区…

📅 2026/9/7 11:04:26
MORE NEWS

更多资讯

📰

最初的梦想是通过写代码,实现自由。没想到最终会以炒股实现自由

这是2020年写的,今年删减了一些东西,系统就将发布时间,改为了现在,特此说明。初一时,就对电脑这块痴迷,连电脑都没摸几回,就对着电脑书,看到凌晨,而仍精神得很。 梦想&am…

📰

关于java中Integer缓存数组的分析

今天发现一个很有趣的事情,java中的Integer如果两个变量值大于127,就算值相等,但是比较其对象则不一致。一、现象分析 1、当Integer值为处于[-128,127]时候,i1和i2,i5和i6这两组对象相同; 2、当Integer值为…

📰

人工智能入门 | K-means聚类算法的应用案例实战(含代码+图示)

前言:Hello大家好,我是小哥谈。K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑…

📰

计算机网络-概论

物理媒体 (1). 双绞铜线 常用于建筑内网络. (2). 同轴电缆 常用于电缆电视系统. (3). 光纤 优势:速度快,不受电磁干扰,低衰减,难窃听 常用于长途传输媒体,因特网主干. (4). 陆地无线…

📰

提示工程核心原则与AI交互设计实践

1. 为什么提示设计能决定用户体验成败在AI交互领域,提示(prompt)就是用户与系统对话的"第一句话"。一个糟糕的提示设计,就像让用户面对一台没有按钮的老式收音机——明明功能强大,却不知从何下手。去年我们团…

📰

树莓派Pico低功耗实战:lightsleep深度优化与GPIO22唤醒避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬