leetcode(力扣) 128. 最长连续序列(哈希)

news/2025/1/1 1:08:10/

文章目录

  • 题目描述
  • 思路分析
  • 完整代码

题目描述

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

思路分析

要我说,这种题就应该直接暴力,管他超不超时的呢。

正经~~~~

1.造哈希表hs,key存当前遍历的数值,value存连续区间的最大长度。
2.遍历所给数组nums。

  • 若当前值在哈希表里,则无视,因为求的是最长连续区间嘛,重复值肯定不算的。
  • 若不在哈希表里,则找到当前值的前一个数left和后一个数right所记录的连续区间长度。
    3.更新当前值最大连续区间长度=left+right+1,更新当前值的前一个值的最大长度,和后一个值的最大长度。

举例:nums = [100,4,200,1,3,2]

1。设指针i遍历nums,i = 100。判断99和101是否在哈希表里,不在,left和right都是0。则当前最大长度就是left+right+1。所以当前哈希表={100:1}

2。i = 4 ,i = 200 同理,i=1同理。此时哈希表 = {100:1 , 4:1 , 200:1 , 1:1}。

3。i = 3,此时 3的前一个数2没在哈希表里,所以left依旧是0.而3的后一个数为4,4在哈希表里,所以此时right=hs[4]=1。那么当前值3的最大连续区间left+right+1 = 2,哈希表= {100:1 , 4:1 , 200:1 , 1:1 , 3:2}。

4。紧接着更新i=3的前一个值和后一个值在哈希表中记录的最大区间长度,即hs[i-left] =2,同理hs[i+right] = 2。

5。i=2,同理判断2,left = 1。right = 2,当前2的最大连续区间 = 4,所以哈希表= {100:1 , 4:1 , 200:1 , 1:1 , 3:2 , 2:4}

6。紧接着更新i=2的前一个值和后一个值在哈希表中记录的最大区间长度,即hs[i-left] =4,同理hs[i+right] = 4。

完整代码

class Solution:def longestConsecutive(self, nums: List[int]) -> int:res = 0hs = {}for i in nums:if i not in hs:left = hs.get(i-1,0)right = hs.get(i+1,0)su = left+right+1res = max(res,su)hs[i] = suhs[i-left] = suhs[i+right] = suprint(res)return res ```

http://www.ppmy.cn/news/1173028.html

相关文章

浙江大学利用 SVM 优化触觉传感器,盲文识别率达 96.12%

生物传感是人类与机器、人类与环境、机器与环境交互的重要媒介。其中,触觉能够实现精准的环境感知,帮助使用者与复杂环境交互。 为模仿人类的触觉,科研人员开发了各种传感器,以模拟皮肤对环境的感知。然而,触觉传感的要…

构建实时视频聊天应用:使用WebRTC和Netty的完整指南

构建实时视频聊天应用:使用WebRTC和Netty的完整指南 使用WebRTC和Netty构建实时视频聊天应用准备工作步骤1:创建Netty服务器步骤2:创建WebRTC前端应用步骤3:处理WebRTC连接步骤4:处理Netty服务器端步骤5:运…

Flutter和SwiftUI比较

0.语言 SwiftUI 毫无疑问是Swift语言编写, 在2019年正式推出,目前最新是Swift 5.9 (2023年9月),由Apple公司维护和发行; 该编程语言发明人已离职Apple。 语言官网:https://developer.apple.com/swift/ 最好用Xcode编…

Ubuntu22.04安装,SSH无法连接

Ubuntu初始化安装后,系统默认不允许root通过ssh连接,因此需要完成三个设置 1.修改ssh配置文件 vim /etc/ssh/sshd_config 将PermitRootLogin注释打开,并将值改为yes 保存修改并退出 :wq 2.重启ssh服务 sudo service ssh restart 3.重新打…

Linux常用命令——clear命令

在线Linux命令查询工具 clear 清除当前屏幕终端上的任何信息 补充说明 clear命令用于清除当前屏幕终端上的任何信息。 语法 clear实例 直接输入clear命令当前终端上的任何信息就可被清除。 在线Linux命令查询工具

字符设备驱动框架(字符设备基础一)

编写字符设备驱动框架:首先驱动向 Linux 内核进行设备号申请,之后的字符设备注册时,会对申请的设备号进行使用。而 Linux 内核会将字符设备抽象成一个具体的struct cdev结构体,该结构体记录了字符设备的字符设备号、内核对象等信息…

【FPGA】IIC协议通用主机接口的设计与实现详解

一、认识IIC IIC(I2C)协议是一种串行通信协议,用于连接微控制器和外围设备。IIC协议只需要两根信号线(时钟线SCL和数据线SDA)就能完成设备之间的通信;支持多主机和多从机通信,通过设备地址区分不…

可管理链接仪表板Bender

什么是 Bender ? Bender 是一款无需任何代码即可管理的链接仪表板。非常适合管理服务列表。其深受 Homer 仪表板 的启发,旨在通过一项重大更改提供相同的功能,无需编辑 yaml 文件! Homer 软件我们之前已经介绍过了,两者…