当前位置: 首页 > news >正文

力扣 128. 最长连续序列

题目描述

在这里插入图片描述

我的思路

我的思路比较暴力,就是首先将数组从小到大进行排序,然后再依次遍历判断序列是否连续并时时更新连续序列的最长长度。比如示例1:nums = [100, 4, 200, 1, 3, 2],第一步先将数组进行排序得到sort_nums = [1, 2, 3, 4, 100, 200];第二步遍历的时候其实不用每个数都遍历,比如遍历1的时候发现1和后面的2,3,4是连续的,那么后续2,3,4就不用再遍历了,直接从100开始遍历;每遍历一个元素时记录以该元素开头的连续序列长度,实时更新前面所有连续序列的最长长度;最后输出最长长度。

这个思路是可以解决问题的,但是时间复杂度明显不符合题目要求,首先看排序的时间复杂度就超过O(n)了,后续遍历的时间复杂度为O(n^2),算法仍需进一步优化。

官方题解:哈希表

看了官方题解的哈希表解法,再对照我自己的暴力搜索思路,发现了2个关键的改进点。

1、利用哈希表搜索高效的优势,替代数组元素遍历(因为本质上是判断特定元素是否存在的问题)。

2、利用连续序列的性质来减少重复搜索的次数,比如发现从1开始的1,2,3,4的连续序列后,再看从2开始的连续序列时就可以直接跳过了,因为2的前一数1存在,因此以1开头的连续序列肯定比2开头的连续序列长。

经过这两点的优化,算法的复杂度就是搜索哈希表的复杂度,即O(n)。

该思路的代码如下

class Solution:def longestConsecutive(self, nums: List[int]) -> int:longest_streak = 0num_set = set(nums) # 转成集合,只留唯一元素即可for num in num_set:if num - 1 not in num_set: # 如果前一个元素并不存在,则作为序列的起始元素进行连续序列长度的计数current_num = numcurrent_streak = 1 while current_num + 1 in num_set: # 若下一个数字存在则连续序列长度进行更新current_num += 1current_streak += 1longest_streak = max(longest_streak, current_streak)return longest_streak

参考

力扣官方题解: 最长连续序列

相关文章:

力扣 128. 最长连续序列

题目描述 我的思路 我的思路比较暴力,就是首先将数组从小到大进行排序,然后再依次遍历判断序列是否连续并时时更新连续序列的最长长度。比如示例1:nums [100, 4, 200, 1, 3, 2],第一步先将数组进行排序得到sort_nums [1, 2, 3,…...

Stable Diffusion AI绘画工具的安装与配置(MAC用户)

AI绘画的热潮席卷了整个创意行业,Stable Diffusion作为其中的翘楚,让艺术创作变得前所未有的简单。然而,对于使用Mac电脑用户来说,安装和配置Stable Diffusion可能显得有些棘手。别担心,这份详细的教程将手把手教你如何…...

flowable源码解读——并行多实例节点任务是否是顺序生成

最近在项目开发中需要在多实例开始监听里修改一个全局的计数变量,不太确定并行多实例任务在底层引擎是顺序生成还是并行生成的,如果是顺序生成的则不影响,如果是并行生成 则修改一个全局的计数变量就会出现数据错误问题,查阅了flo…...

【机器学习】AGI的基本概念、技术挑战和应用前景

引言 AGI是指机器能够完成人类能够完成的任何智力任务的能力 文章目录 引言一、什么是AGI1.1 AGI,Artificial General Intelligence(通用人工智能)1.2 AGI的定义和标准1.3 AGI的发展 二、AGI的技术挑战2.1 理解人类智能2.2 认知复杂性2.3 自主…...

flink 使用RocksDB作为状态后端

RocksDB flink在生产环境中常用RocksDB作为状态后端 1、subtask在taskmanager中作为一个线程运行,如果设置了RocksDB状态后端,RocksDB也会启动一个独立的线程,供subtask来使用。 2、RocksDB是一个kv数据库,因此只能存储flink的键…...

【运维高级内容--MySQL】

目录 一、mysql安装 二、MySQL主从复制 一、mysql安装 yum install cmake gcc-c openssl-devel ncurses-devel.x86_64 rpcgen.x86_64 #安装依赖性 #在root路径下下载mysql-boost-5.7.44、libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm安装包 yum install libtirpc-devel…...

【仿真与实物设计】基于51单片机设计的打地鼠游戏机——程序源码原理图proteus仿真图PCB设计文档演示视频元件清单等(文末工程资料下载)

基于51单片机设计的打地鼠游戏机 演示视频: 基于51单片机设计的打地鼠游戏机 功能描述:使用 51单片机为核心制作一个打地鼠游戏机。按下启动开关,8盏LED流水点亮并闪烁2次,随即开始播放游戏音乐,直到开始选择模式。选…...

iPhone设备使用技巧:忘记密码的情况下如何解除iOS 18/17屏幕时间

我们给了儿子一部新手机。在尝试擦除旧手机上的所有内容并恢复出厂设置时,它要求提供 4 位屏幕时间密码。我已经尝试了我们会使用的所有可能性,但无法弄清楚。我们如何绕过这个问题或将手机恢复出厂设置以便我们可以出售它? Apple 社区 对于…...

内网渗透的风行者—Yasso

Yasso : Yasso,让内网渗透变得简单而高效。- 精选真开源,释放新价值。 概览 Yasso是由sairson精心打造的内网渗透辅助工具集,它为网络安全专家和渗透测试人员提供了一个功能强大的工作平台。在面对错综复杂的网络环境时&#xff…...

Android13 app后台无法启动Abort background activity starts from

总纲 android13 rom 开发总纲说明 目录 1.前言 2.log分析 3.代码查找分析 4.修改方法 5.编译测试 6彩蛋 1.前言 Android13 用户app后台无法启动,提示Abort background activity starts from 10111 2.log分析 08-07 21:37:36.703: W/ActivityTaskManager(440): Back…...

Day45 | 99.岛屿数量 深搜 广搜 100.岛屿的最大面积

语言 Java 99.岛屿数量 深搜 广搜 99. 岛屿数量 题目 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可…...

css之grid布局(网格布局)

简述&#xff1a; 网格布局顾名思义就是将元素呈现为网状的整齐布局 简单使用&#xff1a; <div><div class"test"><div class"item">1</div><div class"item">2</div><div class"item">…...

数据可视化大屏模板-美化图表

Axure作为一款强大的原型设计软件&#xff0c;不仅擅长构建交互式界面&#xff0c;更在数据可视化方面展现出了非凡的创意与实用性。今天&#xff0c;就让我们一起探索Axure设计的几款精美数据可视化大屏模板&#xff0c;感受数据之美。 立体图表的视觉冲击力 Axure的数据可视…...

【与C++的邂逅】--- 类和对象(中)

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 与C的邂逅 本篇博客我们将学习类和对象中&#xff0c;认识类的六个默认成员函数以及实现日期类。下图为本节思维导图。 &#x1f3e0; 类的6个默认成员函…...

[数据集][目标检测]瞳孔虹膜检测数据集VOC+YOLO格式8768张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8768 标注数量(xml文件个数)&#xff1a;8768 标注数量(txt文件个数)&#xff1a;8768 标注…...

Day42 | 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II

语言 Java 739. 每日温度 每日温度 题目 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该…...

运维大规模K8S集群注意事项

序言 闲来无事&#xff0c;一片混沌&#xff0c;想不清思不断&#xff0c;改变好像来自于各个方面&#xff0c;有的时候是内部的冲突&#xff0c;有的时候是外部的竞争&#xff0c;然而&#xff0c;大部分情况下&#xff0c;一旦错过&#xff0c;就已经没得选了。 尴尬的处境&a…...

供应链系统源码的关键技术是什么?

供应链管理是企业运营中的重要环节&#xff0c;而高效的供应链系统能够大幅提升企业的竞争力。在数字化转型的过程中&#xff0c;越来越多的企业选择使用开源供应链系统源码来定制开发适合自身需求的解决方案。那么&#xff0c;供应链系统源码的关键技术有哪些&#xff1f;本文…...

git 修改远程仓库的 URL

git remote set-url origin 修改远程仓库的 URL。 old:ssh://wangzhijun192.168.10.48:29418/kapok new:http://wangzhijun172.31.178.243:90/kapok git remote set-url origin ssh://wangzhijun172.31.178.243:29418/kapok old:https://120.79.152.225/wuzeyuan/flymap_app n…...

使用图数据库 Neo4j 处理对象之间的关系

使用 Neo4j 图数据库来处理明星之间的关系涉及以下主要步骤&#xff1a;数据建模、数据导入、查询和关系修改。下面是详细的操作步骤&#xff1a; 1. 安装 Neo4j 下载和安装: 从 Neo4j 官方网站 下载 Neo4j Community Edition 或者 Enterprise Edition&#xff0c;安装并启动…...

使用C#的异步和依赖注入实现网络数据存储

详细解释 依赖注入&#xff08;Dependency Injection&#xff09;: ConfigureServices 方法配置了服务的依赖注入。IDataProcessor 接口与 DataProcessor 类绑定&#xff0c;IDbConnectionFactory 接口与 DbConnectionFactory 类绑定。这样在程序运行时&#xff0c;依赖注入容器…...

tomcat日志文件切割

文章目录 引言I 使用用crontab工具,定时执行任务II 通过Linux系统自带的切割工具logrotate来进行切割logrotate 简介用法结合crontab进行自定义的定时轮转操作III 基于其他日志框架进行分隔引言 tomcat 的 catalina.out 文件不会进行日志切割,当这个文件大于2G 时,会影响to…...

Python将Word文档转为PDF

使用python将word转pdf_py work转pdf-CSDN博客 掌握Python技巧&#xff1a;PDF文件的加密和水印处理-CSDN博客...

深入浅出链表

目录 1.链表的基本概念及结构 1.1基本概念 1.2结构 2.链表的分类 3.链表的实现&#xff08;循环链表增删查改实现&#xff09; 1.动态申请节点&#xff08;结点&#xff09;​编辑 2.单链表打印 3.单链表尾插 4.单链表头插 5.单链表尾删 6.单链表头删 7.单链表查找 …...

Linux核心命令入门

Linux常用命令 文件管理文件目录管理文件查看编辑 系统管理网络管理hostnamehost/nslookuptraceroutenetstat列出所有端口 (包括监听和未监听的)列出所有处于监听状态的 Sockets显示每个协议的统计信息 硬件管理df&#xff08;Disk Free&#xff09;du&#xff08;Disk Usage&a…...

腾讯无界微前端框架介绍

一、无界微前端框架概述 无界微前端框架是由腾讯团队推出的&#xff0c;旨在解决现有微前端方案中存在的问题&#xff0c;如适配成本高、样式隔离困难、运行性能不佳、页面白屏、子应用通信复杂、子应用保活机制缺乏等。 技术实现 无界微前端的核心技术是基于Web Component…...

Linux——网络(2)

一、通信 --- 不同主机上进程间的通信 1、IP和端口号 IP&#xff1a;标识网络中的一台主机 本质上 32位的整型数据 端口号: 标识某个进程 本质上 16位的整型数据 2、udp和tcp udp的特点: 1.无连接 2.不可靠 tcp的特点&#xff1a; 1.面…...

结合量子技术解决数据传输安全

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 接前篇&#xff1a;数采网关面…...

【Rust光年纪】提高开发效率:深入了解Rust语言中的数据库客户端和文件处理库

深入探索&#xff1a;Rust语言中多款数据库客户端与文件处理库详解 前言 在现代软件开发中&#xff0c;使用各种数据库和文件处理操作是非常常见的。Rust语言作为一种快速、安全、并发的系统编程语言&#xff0c;也拥有丰富的生态系统和库。本文将介绍几个用于Rust语言的数据…...

【自动驾驶】控制算法(一)绪论与前期准备

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…...