【LeetCode热题100】【哈希】最长连续序列

据说是字节跳动二面的原题,这题面试要是让我当场手撕,我直接当场去世T_T

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

思路

题目的意思是让我们找出这个数组里面有多少个是连续,还要在O(n)的复杂度实现

所以我们只能进行一层循环

先铺垫一下思路,一个数可能是一个连续序列的开始,也可能是一个连续序列的结束,还有可能连接起左右两个连续序列形成一个新的序列,序列长度即为left+1+right,基于此,下面开始讲解 

我们的思路是这样的,建立起一个哈希映射,一层循环遍历数组元素,判断这个元素在不在哈希映射表里面,如果不在,我们把这个元素添加到哈希映射里面去,并设置值为1,表示这个连续序列的长度为1

接着判断这个元素减一,即x-1,在不在哈希里面,我们想要看这个元素x是不是一个连续序列的尾巴,如果是,让元素x的值为x-1的值加一,表示这个连续的序列现在又多了一个,但是这样还不行,我们必须把这个序列的另一端,即这个连续序列的头部的值也更新一下,因此我们需要先记录下这个头部的索引,为什么不直接更新呢,因为元素x可能还可以连接起右边的序列使得目前的连续序列变长,因此我们先记录下序列头部的索引,后面再一起更新

然后就是判断x+1在不在哈希里面,看看x是不是一个连续序列的头部,如果是,我们就可以更新这个连续序列的长度,和上面一样,我们同时需要更新另一端,即这个序列的尾巴的值也更新为新序列的长度

在过程中,更新最长的长度

class Solution {
public:int longestConsecutive(vector<int> &nums) {unordered_map<int, int> hashmap;int answer = 0;for (int num: nums) {if (hashmap.find(num) == hashmap.end()) {hashmap[num] = 1;int left = num;int right = num;if (hashmap.find(num - 1) != hashmap.end()) {hashmap[num] = hashmap[num - 1] + 1;left=num - hashmap[num-1];}if (hashmap.find(num + 1) != hashmap.end()) {hashmap[num] = hashmap[num + 1] + hashmap[num];right=num + hashmap[num+1];}hashmap[left] = hashmap[right] = hashmap[num];answer = answer > hashmap[num] ? answer : hashmap[num];}}return answer;}
};

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

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

相关文章

KMP字符串

试题传送门&#xff1a;831. KMP字符串 给定一个字符串 S&#xff0c;以及一个模式串 P&#xff0c;所有字符串中只包含大小写英文字母以及阿拉伯数字。 模式串 P 在字符串 S 中多次作为子串出现。 求出模式串 P 在字符串 S 中所有出现的位置的起始下标。 输入格式 第一行输入…

Azure Machine Learning - Azure AI 搜索中的索引器

在 Azure AI 搜索中&#xff0c;搜索索引是可搜索的内容&#xff0c;可供搜索引擎用于索引编制、全文搜索和筛选后查询。 索引由架构定义并保存到搜索服务中&#xff0c;第二步是数据导入。 除了在主数据存储中&#xff0c;此内容也存在于搜索服务中&#xff0c;这是在新式应用…

由11月27日滴滴崩溃到近两个月国内互联网产品接二连三崩溃引发的感想

文章目录 知乎文分析微信聊天截图微信公众号 滴滴技术 发文k8s 官方文档滴滴官方微博账号 近两个月国内互联网产品“崩溃”事件2023-10-23 语雀崩溃2023-11-12 阿里云崩溃2023-11-27 滴滴崩溃2023-12-03 腾讯视频崩溃总结 我的感想 知乎文分析 最近连续加班&#xff0c;打车较…

黑猫带你学eMMC协议第31篇:什么是eMMC的驱动强度(Drive Strength)

本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,已加入原创侵权保护,禁止私自转载。 文章所在专栏:《黑猫带你学:eMMC协议详解》 1 简介 首先要清楚: 内阻越大,驱动强度越小;内阻越小,驱动强度越大。 ECSD[185]可调节…

【ARM CoreLink 系列 8.2 -- SMMU 详细介绍-STE Entry 详细介绍 2】

请阅读【ARM CoreLink 文章专栏导读】 上篇文章:【ARM CoreLink 系列 8.1 – SMMU 详细介绍-STE Entry 详细介绍 1】 文章目录 ARM SMMU STE ENTRY1.1 STE Entry WORD[3]1.1.1 MemAttr1.1.2 MTCFG1.1.3 ALLOCCFG1.1.4 SHCFG1.1.5 NSCFG1.1.6 PRIVCFG

todesk连接ubuntu显示当前系统并无桌面环境,或无显示器,无法显示远程桌面,您需要自行安装X11桌面环境,或者使用终端文件功能

ToDesk远程遇到的问题如上图&#xff0c;换向日葵直接黑屏&#xff1b; 问题原因 截止发文时间&#xff0c;Todesk只支持X11协议&#xff0c;没有适配最新的Wayland协议&#xff0c;所以我们需要把窗口系统调整为X11才可以。 解决方法 修改配置文件&#xff0c;关闭wayland su…

【模电】基本共射放大电路的工作原理及波形分析

基本共射放大电路的工作原理及波形分析 在上图所示的基本放大电路中&#xff0c;静态时的 I B Q I\tiny BQ IBQ、 I C Q I\tiny CQ ICQ、 U C E Q U\tiny CEQ UCEQ如下图( b )、( c )中虚线所标注。 &#xff08; a &#xff09; u i 的波形&#xff08; b &#xff09; i B …

LeetCode:1038. 从二叉搜索树到更大和树(反向中序遍历 C++、Java)

目录 1038. 从二叉搜索树到更大和树 题目描述&#xff1a; 实现代码与解析&#xff1a; dfs 原理思路&#xff1a; 1038. 从二叉搜索树到更大和树 题目描述&#xff1a; 给定一个二叉搜索树 root (BST)&#xff0c;请将它的每个节点的值替换成树中大于或者等于该节点值的所…

JDK8新特性——Stream流

文章目录 一、Stream流体验二、Stream流的创建三、Stream流中间方法四、Stream流终究方法 Stream流&#xff08;也叫Stream API&#xff09;。它是从JDK8以后才有的一个新特性&#xff0c;是专业用于对集合或者数组进行便捷操作的 一、Stream流体验 需求&#xff1a;有一个Lis…

linux远程桌面管理工具(xrdp)、向日葵

Windows远程桌面 linux远程桌面 使用向日葵远程桌面&#xff08;手机端同理&#xff09; Windows远程桌面 微软自带Remote Desktop Connection Manager &#xff08;RDCMan&#xff09;远程控制管理软件介绍 远程桌面连接管理器 v2.93 linux远程桌面 Windows远程桌面Ubunt…

JVM 运行时内存(三)

Java 堆从 GC 的角度还可以细分为: 新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代。 1. 新生代 是用来存放新生的对象。一般占据堆的 1/3 空间。由于频繁创建对象&#xff0c;所以新生代会频繁触发MinorGC 进行垃圾回收。新生代又分为 Eden 区、ServivorFrom、…

Android Framework 电池提醒相关Dialog熄屏消失的问题

记录一下花了三四天干一天就能完成的需求的傻事。 说在前头&#xff0c;这篇文章记录了电池提醒dialog相关&#xff0c;弹出dialog且熄屏再亮屏dialog不会消失的代码&#xff0c;这篇废话比较多&#xff0c;看正常代码直接跳到代码3。 故事背景 需求要求添加非法电池的弹窗&a…

蔚来的理想——蔚来产品战略深度剖析

导读 持续亏损的蔚来&#xff0c;未来是否会出局&#xff1f; 跑去做手机的蔚来&#xff0c;是瞎搞还是精心谋划&#xff1f; 换电和服务&#xff0c;真的是蔚来的核心竞争力吗&#xff1f; 做全栈技术值得吗&#xff1f;会不会拖死蔚来&#xff1f; 这些具体抉择与具体方…

[多线程]阻塞队列和生产者消费者模型

目录 1.阻塞队列 1.1引言 1.2Java标准库中的阻塞队列 1.3自主通过Java代码实现一个阻塞队列(泛型实现) 2.生产者消费者模型 1.阻塞队列 1.1引言 阻塞队列是多线程部分一个重要的概念,它相比于一般队列,有两个特点: 1.线程是安全的 2.带有阻塞功能 1) 队列为空,出队列就会阻…

语义分割 DeepLab V1网络学习笔记 (附代码)

论文地址&#xff1a;https://arxiv.org/abs/1412.7062 代码地址&#xff1a;GitHub - TheLegendAli/DeepLab-Context 1.是什么&#xff1f; DeepLab V1是一种基于VGG模型的语义分割模型&#xff0c;它使用了空洞卷积和全连接条件随机&#xff08;CRF&#xff09;来提高分割…

JAVA-作业7-画一个笑脸

要求如题 代码如下&#xff1a; SmileFace01: import java.awt.Color; import java.awt.Graphics;import javax.swing.JPanel;public class SmileFace01 extends JPanel {Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);int width getWidth(…

MyBatis 设计模式解析

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

实用的 ES6 代码片段

在我们的开发流程中&#xff0c;我们经常会遇到一些具有挑战性的问题&#xff0c;而解决这些问题可能只需要几行代码。在本文中&#xff0c;我试图整理出一些有用的代码片段&#xff0c;帮助您在处理 URL、DOM、事件、日期、用户偏好等方面时更加便捷。 所有这些代码片段都是从…

代码随想录刷题题Day5

刷题的第五天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C / Python Day5 任务 ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和 1 哈希表理…

【开题报告】基于SpringBoot的艾滋病科普平台的设计与实现

1.选题背景 艾滋病&#xff08;艾滋病毒感染与免疫缺陷综合征&#xff09;是一种严重的传染病&#xff0c;对人类的健康和社会稳定造成了极大的影响。全球范围内&#xff0c;艾滋病已经成为公共卫生领域的重大挑战之一。尽管在科学研究和医疗技术方面取得了一定进展&#xff0…