[python 刷题] 128 Longest Consecutive Sequence

2023-09-21 01:52:27

[python 刷题] 128 Longest Consecutive Sequence

题目:

Given an unsorted array of integers nums, return the length of the longest consecutive elements sequence.

You must write an algorithm that runs in O(n) time.

这题给了一个没有排序的数组,并且要求找出最长的连续序列

最简单的方式其实还是排序,不过题目中要求时间复杂度为 O ( n ) O(n) O(n),而排序的时间复杂度为 O ( n l o g ( n ) ) O(n log(n)) O(nlog(n))

Union Find 也可以用来解这题,它的时间复杂度是 amortized linear,不过这个问题的话有一个 linear 的解。

[100,4,200,1,3,2] 为例,假设有一个无限延长的 x 轴,所有的点在 x 轴上看起来是这个样子的:

在这里插入图片描述

这个情况下就比较清楚的可以看到哪个点在哪个 cluster 里,在实际的实现中,可以用一个 set 去存储所有出现的值,每次将值存入 cluster 中,都可以检查一下当前值是否是 cluster 的最小值,如果是的话,查看当前 cluster 的长度

代码如下:

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        num_set = set(nums)
        max_len = 0
        for num in num_set:
            if (num - 1) in num_set:
                continue

            local_max = 1
            right = num + 1
            while right in num_set:
                local_max += 1
                right += 1

            max_len = max(max_len, local_max)

        return max_len

整体时间复杂度的分析:

创建 set 的时间复杂度为 O ( n ) O(n) O(n)

第一个 for 循环的时间复杂度为 O ( n ) O(n) O(n)

查询当前值是否存在与 set 的时间复杂度为 O ( 1 ) O(1) O(1)

第二个循环 while 在最差的情况下会跑 O ( n ) O(n) O(n) 次,但是因为有 if,的检查,所以这个情况最坏只会跑一次,而 O ( n + n ) O(n + n) O(n+n) 在大 O 里面依旧是 O ( n ) O(n) O(n),所以整体的时间复杂度为 O ( n ) O(n) O(n)

更多推荐

使用pdfplumber提取pdf中的文字

一、安装pdfplumberpdfplumber是一个Python库,必须通过pip安装才能在Python代码中进行使用。使用以下命令在Python中安装pdfplumber。pipinstallpdfplumber二、用pdfplumber打开PDF文档在Python中使用pdfplumber打开PDF文档的方法非常

如何使用极狐GitLab 支持 ISO 27001 合规

目录组织控制技术控制了解更多本文来源:about.gitlab.com作者:JosephLongo译者:武让极狐GitLab高级解决方案架构师作为一体化平台,通过极狐GitLab可以很容易实现DevSecOps全生命周期管理。极狐GitLab使开发人员能够更快地构建更好的软件应用。但是,它的能力还不仅限于DevSecO

VSCode 配置 Lua 开发环境(清晰明了)

概述由于AutoJS学得已经差不多了,基本都会了,现在开始向其他游戏脚本框架进发,Lua语言很强大,就不多说,按键精灵、触动精灵等等都是用该语言编程脚本的,由于按键精灵、触动精灵和AutoJS类似,不是说一样是因为按键精灵、触动精灵整合大漠插件等牛逼插件,控制3维角色等。我主要学来在GG修改器中修改游戏内存,我的初衷是

springcloude gateway的意义

应用场景1、南北向流量需要流量网关和微服务网关配合使用,将内部的微服务能力,以统一的HTTP接入点对外提供服务。流量网管主要是接入流量进行负载均衡,上游的微服务网关地址和数量变化不大,对服务发现要求不高。微服务网关则把外部请求映射到内部的微服务上,微服务的节点地址和数量会经常变化,路由规则变化基本稳定,微服务网关很方便

php文件上传功能(文件上传)

实现文件上传是Web开发中常用的功能之一,而PHP也是支持文件上传的。那么,下面我们就来介绍一下常用的PHP实现文件上传的方法。使用HTML表单实现文件上传HTML表单是Web开发中最基本的元素之一,它可以接收用户输入的数据,并通过HTTP协议将数据提交到服务器端。在HTML表单中,可以使用元素来实现文件上传的功能。在

ReactNative中升级IOS 17版本Crash解决

ReactNative中升级IOS17版本Crash解决ReactNative中升级IOS17版本Crash解决一、问题描述二、原因分析三、解决方案决策3.1设置宽高为非零值3.2使用新的UIGraphicsImageRenderer替换就版本的UIGraphicsBeginImageContext四、可能使用到该AP

构建无缝的服务网格体验:分享在生产环境中构建和管理服务网格的最佳实践

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

Go 微服务开发框架 DMicro 的设计思路

Go微服务开发框架DMicro的设计思路DMicro源码地址:Gitee:dmicro:dmicro是一个高效、可扩展且简单易用的微服务框架。包含drpc,dserver等背景DMicro诞生的背景,是因为我写了10来年的PHP,想在公司内部推广Go,公司内部的组件及rpc协议都是基于swoole定制化开发的。调研了市

个人所思所想录

🧑‍💻作者名称:DaenCode🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表,业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅,闭关学习中······😎人生感悟:尝尽人生百味,方知世间冷暖。📖所属专栏:项目所感所想文章目录🌟绪论🌟编

平价护眼台灯推荐,2023百元台灯性价比最高的品牌推荐

想要选好护眼台灯首先我们要知道什么是护眼台灯,大的方向来看,护眼台灯就是可以保护视力的台灯,深入些讲就是具备让灯发出接近自然光特性的光线,同时光线不会伤害人眼而出现造成眼部不适甚至是视力降低的照明设备。从细节上看就要具体到护眼台灯的设计、硬核技术、贴心细节、光源的把控等等,灯光的覆盖面积也是关键,综合下才能确定什么才是

Linux- inode & vnode

什么是inodeinode是UNIX和UNIX-like操作系统中的一个关键概念。它代表了文件系统中文件或目录的元数据。每个文件和目录在文件系统中都有一个与之关联的inode。这个数据结构存储了关于文件的所有信息,除了其名称和实际数据之外。以下是inode中通常包含的信息:文件类型:如常规文件、目录、字符设备、块设备、

热文推荐