LeetCode Hot100 C++ 哈希 128.最长连续序列

在这里插入图片描述
128.最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

给定一个未排序的整数数组 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
提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109

思路:
1、把数组nums的所有元素存到hashset中。

2、遍历数组nums,明确连续序列的起点,对于数组nums中的元素num,如果num - 1不在hashset中,就把num作为一个连续序列的起点,进入步骤3。

3、从连续序列的起点num开始,不断去hashset中寻找num + i,i >= 1。直到num + len不在hashset中(以num为起点的序列此后就不再连续),更新最长连续序列的长度max_len = max(max_len, len)。如果数组nums已遍历完,进入步骤4,否则进入步骤2。

4、返回max_len。

class Solution {
public:int longestConsecutive(vector<int>& nums) {int max_len = 0;unordered_set<long long> nums_set;int nums_len = nums.size();//把所有的元素保存在set中for (int i = 0; i < nums_len; ++i) {nums_set.emplace(nums[i]);}for (auto& num:nums) {//num-1不在set中 保证num是连续序列的起始元素if (nums_set.find(num - 1) == nums_set.end()) {int len = 0;//num+len在set中 说明num~num+len是连续的while (nums_set.find(num + len) != nums_set.end()) {++len;max_len = max(len, max_len);}}}return max_len;}
};

ps:
GPT4O逐句解析

初始化变量:
int max_len = 0: 初始化变量 max_len,用于记录最长连续序列的长度。
unordered_set nums_set: 创建一个 unordered_set,用于存储数组中的元素,并确保每个元素唯一且查找操作高效。
使用 long long 是为了避免整数溢出(尽管输入数据一般是 int,此处对潜在溢出进行保护)。
int nums_len = nums.size(): 获取输入数组的长度 nums_len,以避免多次调用 nums.size()。

将所有元素存入 unordered_set:
//把所有的元素保存在set中
for (int i = 0; i < nums_len; ++i) {
nums_set.emplace(nums[i]);
}
通过 for 循环,将 nums 中的每个元素添加到 nums_set 中,利用 unordered_set 实现 O(1) 的查找时间复杂度。

遍历 nums 数组:
for (auto& num : nums): 遍历 nums 中的每个元素,num 是当前元素的引用。
if (nums_set.find(num - 1) == nums_set.end()): 检查 num - 1 是否在 nums_set 中。如果 num - 1 不存在,说明 num 是一个连续序列的起始元素。
这一条件用于确保每个连续序列只从序列的起点开始扩展,避免重复计算。

计算当前连续序列的长度
int len = 0;
// num + len在set中 说明num~num + len是连续的
while (nums_set.find(num + len) != nums_set.end()) {
++len;
max_len = max(len, max_len);
}
int len = 0: 初始化 len 为 0,用于计算当前连续序列的长度。
while (nums_set.find(num + len) != nums_set.end()): 使用 while 循环检查 num + len 是否存在于 nums_set 中,说明从 num 开始是连续的。
++len: 增加 len,向后扩展当前的连续序列。
max_len = max(len, max_len): 更新 max_len,记录最长的连续序列长度。
最后返回max_len。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/54800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么测试射频芯片质量的好坏?

无论是手机通信&#xff0c;还是卫星导航&#xff0c;射频芯片都是其核心组件之一。本文将探讨如何准确判断射频芯片的质量&#xff0c;以确保技术设备的稳定运行。 1. 外观检查 检查射频芯片是否有破损、引脚断裂、缺陷等。 2. 电气参数测试 对射频芯片的输入输出阻抗、功耗、…

RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

伊犁云计算22-1 rhel8 dhcp 配置

1 局域网搭建 2 yum 配置 这个参考前面 不说 3 dnf 安装dhcp 好我们废话不说开始安装。理论看书去 进入 dhcp.conf 配置 重启dhcpd 不能报错&#xff01;&#xff01;&#xff01;&#xff01; 我们在客户机上做测试 全局的dhcp关闭 很明显我们的客户机获取到192.16…

libreoffice word转pdf

一、准备一个word文件 运行&#xff1a; cd /root libreoffice --headless --convert-to pdf --outdir /root/output doc1.docx 发现中文乱码&#xff1a; 此时我们需要给linux 上添加中文字体&#xff1a; centos7 添加中文字体 再次运行正常&#xff1a; libreoffice --h…

如何使用Postman搞定带有token认证的接口实战!

现在许多项目都使用jwt来实现用户登录和数据权限&#xff0c;校验过用户的用户名和密码后&#xff0c;会向用户响应一段经过加密的token&#xff0c;在这段token中可能储存了数据权限等&#xff0c;在后期的访问中&#xff0c;需要携带这段token&#xff0c;后台解析这段token才…

基于SpringBoot社区疫情信息管理系统的设计和实现

文未可获取一份本项目的java源码和数据库参考。 选题的意义 保护好人民群众的基本安全&#xff0c;贯彻党的领导下中国一盘棋的基本准则。将病毒隔绝在外&#xff0c;信息系统的存在显得至关重要&#xff0c;应对新型冠状病毒肺炎疫情治理的实践背景。实时关注更新疫情动态&a…

支持K歌音箱方案应用的高性能 32 位蓝牙音频应用处理器-BP1048B2

DSP是一类嵌入式通用可编程微处理器&#xff0c;主要用于实现对信号的采集、识别、变换、增强、控制等算法处理&#xff0c;是各类嵌入式系统的“大脑”应用十分广泛。BP1048B2是一款高性能DSP音频数字信号处理器芯片&#xff0c;能实现多种音频功能如混响、均衡、滤波、反馈抑…

Vue 自定义指令实现权限控制

一. 引言 Vue.js 提供了一种简单、灵活的方式来创建交互式的用户界面。在 Vue.js 中&#xff0c;指令是一种特殊的属性&#xff0c;可以附加到 HTML 元素上以执行一些操作。我们可以使用自定义指令来实现各种功能&#xff0c;比如&#xff1a;权限控制、自动聚焦、拖动指令等等…

Java基础 — Java 虚拟机(上篇)

该文章属于Java进阶部分的JVM入门&#xff0c;本章讲述了JVM的历史、Java源代码到机器码的过程以及 Class字节码文件的内部结构等。 了解了这篇文章&#xff0c;能让你深入地了解JVM知识&#xff0c;保证在短时间内掌握JVM&#xff01; JVM 入门教程&#xff08;上篇&#xff0…

Android通知服务及相关概念

本文基于Android 14源码 1 NotificationManagerService的启动 1.1 添加服务 和其他系统服务一样&#xff0c;NotificationManagerService也是在SystemServer中启动的。 //framework/base/services/java/com/android/server/SystemServer.java private void run() {t.traceB…

无人机在隧道中如何实现在无卫星信号下的自主导航

无人机在隧道中实现无卫星信号下的自主导航&#xff0c;主要依赖于多种高精尖传感器和先进算法的协同工作。以下是具体的实现方式&#xff1a; 一、传感器技术 惯性导航系统&#xff08;INS&#xff09;&#xff1a; 惯性导航系统通过测量无人机的加速度和角速度&#xff0c…

QT中各数据基础类型互转方式有哪些?

在Qt中&#xff0c;各数据基础类型之间的互转是一个常见的需求&#xff0c;以便在程序的不同部分合理地存储、调用和显示数据。以下是一些常见的Qt数据基础类型互转方式&#xff1a; 1. 数值类型与QString的互转 数值类型转QString 使用QString::number()函数。这个函数可以将…

通过docker启动ElasticSearch后为ElasticSearch设置用户和密码

文章目录 0. 前言1. 没有设置用户名和密码的情况2. 为ElasticSearch设置用户名和密码2.1 进入 ElasticSearch 容器内部2.2 修改 ElasticSearch 的配置文件2.3 设置用户名和密码 3. 在 kibana 容器中指定访问 ElasticSearch 的用户名和密码4. 设置用户名和密码后的情况4.1 访问 …

高级java每日一道面试题-2024年9月18日-设计模式篇-JDK动态代理,CGLIB代理,AspectJ区别?

如果有遗漏,评论区告诉我进行补充 面试官: JDK动态代理,CGLIB代理,AspectJ区别? 我回答: 在Java开发中&#xff0c;代理&#xff08;Proxy&#xff09;是一种常用的设计模式&#xff0c;它允许开发者在不修改原有类代码的情况下&#xff0c;通过代理类来控制对原有类的访问…

[51单片机] 简单介绍 (一)

文章目录 1.单片机介绍2.单片机内部三大资源3.单片机最小系统4.STC89C52RC单片机 1.单片机介绍 兼容Intel的MCS-51体系架构的一系列单片机。 STC89C52&#xff1a;8K FLASH、512字节RAM、32个IO口、3个定时器、1个UART、8个中断源。 单片机简称MCU单片机内部集成了CPU、RAM、…

JAVA学习-练习试用Java实现“两数之和 II”

问题&#xff1a; 给定一个已按照 非递减顺序排列 的整数数组 numbers &#xff0c;请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 &#xff0c;所以答案数组应当满足 1…

Maxim(美信)—MAX20079AATP/VY PMIC芯片详解

写在前面 本系列文章主要讲解Maxim&#xff08;美信&#xff09;—MAX20079AATP/VY PMIC芯片的相关知识&#xff0c;希望能帮助更多的同学认识和了解MAX20079AATP/VY芯片。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) PMIC是Power Management Int…

CC面试准备

半导体基础 半导体是介于导体和绝缘体之间的一种介质&#xff0c;在不同条件下表现出不同的导电性或者不导电特性&#xff0c; 电子半导体器件材料大部分为硅&#xff0c;锗等元素 本征半导体&#xff1a;完全不含杂质的纯净半导体&#xff0c;因为不含杂质&#xff0c;其中…

QT widgets 窗口缩放,自适应窗口大小进行布局

1. 窗口布局 2. 尺寸策略&#xff1a;扩展 Fixed (固定): 行为&#xff1a;控件的大小是固定的&#xff0c;不会随着窗口大小的变化而改变。它的大小由控件的 sizeHint() 返回的值决定。 适用场景&#xff1a;当你希望控件的大小保持不变&#xff0c;不随布局调整时使用&#x…

RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验

1.RAGflow简介 全面优化的 RAG 工作流可以支持从个人应用乃至超大型企业的各类生态系统。大语言模型 LLM 以及向量模型均支持配置。基于多路召回、融合重排序。提供易用的 API&#xff0c;可以轻松集成到各类企业系统。支持丰富的文件类型&#xff0c;包括 Word 文档、PPT、exc…