[LeetCode] 128. 最长连续序列
题目描述
给定一个未排序的整数数组 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
思考
第一反应:对nums进行排序,然后查找最大序列。
但是时间复杂度为 O ( n l o g n ) \Omicron (nlogn) O(nlogn)
然后想一下,可以枚举每个数字,比如x。然后查看x+1,x+2,x+3是否出现过。
朴素的话时间复杂度为 O ( n 2 ) \Omicron (n^2) O(n2)
通过剪枝,如果处理x, 存在x-1的话,肯定不用进行这次遍历(因为结果肯定会小于从x-1开始)。时间复杂度 O ( n ) \Omicron (n) O(n)
然后还可以使用并查集。比如2,3,4在同一个集合。7,8,9,10在一个集合。但是需要维护集合大小。
代码实现
感觉第三种实现比较有意思。虽然实际上写起来就感觉运行会很慢。权当复习并查集了
//
// Created by Anti on 2023/9/1.
//
#include "gtest/gtest.h"
#include "logger.h"/*** @description 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。* 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。*/
class Solution {
private:std::unordered_map<int,int> father_;std::unordered_map<int,size_t> size_; // 所在并查集的大小int max_size_{}; // 最大的并查集大小/*** 返回x的祖先。约定祖先较小。* @param x* @return*/auto get_root(int x) -> int {if(father_[x]==x) {return x;}return father_[x] = get_root(father_[x]);}
public:int longestConsecutive(std::vector<int>& nums) {max_size_ = !nums.empty();for(const auto &num:nums) {father_[num] = num;size_[num] = 1;}for(const auto &num:nums) {auto y = num+1;if(father_.count(num+1)) {auto father_x = get_root(num);auto father_y = get_root(y); // 1 3 5 4if(father_x!=father_y) {if(father_x > father_y) {std::swap(father_x, father_y);}father_[father_y] = father_x;size_[father_x] += size_[father_y];max_size_ = std::max(max_size_, int(size_[father_x]));}}}return max_size_;}
};TEST(S128,SAMPLE1) {Solution s;std::vector<int> nums = {100,4,200,1,3,2};EXPECT_EQ(s.longestConsecutive(nums),4);
}TEST(S128,SAMPLE2) {Solution s;std::vector<int> nums = {0,3,7,2,5,8,4,6,0,1};EXPECT_EQ(s.longestConsecutive(nums),9);
}TEST(S128,TRICK1) {Solution s;std::vector<int> nums = {0};EXPECT_EQ(s.longestConsecutive(nums),1);
}
TEST(S128,TRICK2) {Solution s;std::vector<int> nums = {};EXPECT_EQ(s.longestConsecutive(nums),0);
}
相关文章:
[LeetCode] 128. 最长连续序列
题目描述 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums [100,4,200,1,3,2] 输出&…...
docker 安装rabbitmq
前提:安装好docker docker安装_Steven-Russell的博客-CSDN博客 centos7安装docker_centos7 docker 安装软件_Steven-Russell的博客-CSDN博客 1、启动docker systemctl start docker 2、下载镜像 // 可以先search查询一下可用镜像,此处直接下载最新版本…...
一文概览NLP句法分析:从理论到PyTorch实战解读
目录 一、引言 二、句法与语法:定义和重要性 什么是句法? 例子 什么是语法? 例子 句法与语法的重要性 句法的重要性 语法的重要性 三、句法理论:历史与分类 生成语法(Generative Grammar) 背景…...
NPM 常用命令(三)
目录 1、npm compltion 1.1 描述 2、npm config 2.1 常用命令 2.2 描述 set get list delete edit fix 2.3 配置 json global editor location long 3、npm dedupe 3.1 描述 3.2 配置 4、npm deprecate 4.1 命令使用 4.2 描述 4.3 配置 registry ot…...
UWB学习——day1
UWB定义 UWB:Ultra Wideband(超宽频) UWB所谓的超宽频区别于其它近场通信技术可总结为时域上跳跃,频域上矮胖 从图中可以看出,时域上通过短且强的脉冲信号,频域上主要是超宽的频谱(Spectrum&a…...
2023国赛数学建模C题模型代码
C题代码全部都完成了,可以看文末名片 我们先看C题的一个背景 在生鲜商超中,蔬菜类商品保鲜期短,且品相会随销售时间增加而变差。商超需要根据历史销售和需求每天进行补货。由于蔬菜品种众多、产地不同,补货时间在凌晨,商家须在不明确具体单品和价格的情况下进行补…...
2023年高教社杯数学建模国赛C题详细版思路
C 题 蔬菜类商品的自动定价与补货决策 2023年国赛如期而至,为了方便大家尽快确定选题,这里将对C题进行解题思路说明,以分析C题的主要难点、出题思路以及选择之后可能遇到的难点进行说明,方便大家尽快找到C题的解题思路。 难度排…...
互联网摸鱼日报(2023-09-07)
互联网摸鱼日报(2023-09-07) 36氪新闻 慕尼黑车展纪实:德系车略显“紧张” 隆基全力押注BC,光伏又要变天了? 苹果Vision Pro也逃不过Windows XP系统 官宣造车两年后,小米仍在等待重估 抖音苹果店开业,卖iPhone抢热…...
并行处理系统
并行处理系统概述 并行处理的主要技术问题: 互连:如何实现将多个计算模块和多个存储模块进行互连,并通过控制这些模块的并行工作来提高处理速度数据一致性:为加快数据处理的速度,通常利用程序访问的局部性特性&#x…...
2023国赛数学建模A题思路分析 - 定日镜场的优化设计
# 1 赛题 A 题 定日镜场的优化设计 构建以新能源为主体的新型电力系统, 是我国实现“碳达峰”“碳中和”目标的一项重要 措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站(以下简称塔式电站)收集太阳能的基本组件&…...
git企业级使用
1.初始Git 1.1创建Git仓库 要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来。创建⼀个Git本地仓库对应的命令为 git init ,注意命令要在⽂件⽬录下执⾏,例如:…...
[docker]笔记-存储管理
1、docker数据存储分为非永久性存储和永久性存储。 非永久性存储:容器创建会默认创建非永久性存储,该存储从属于容器,生命周期与容器相同,会随着容器的关闭而消失(可理解为内存中数据,会随关机而消失&…...
记录获取蓝鲸智云token的过程
一、使用python脚本获取蓝鲸智云token python版本环境:3.11 # -*- coding: utf-8 -*- import requestsdef get_user_token(domain,user,password):模拟用户登录,并返回 bk_token 和 bk_csrftokenBK_PAAS_HOST domainUSERNAME userPASSWORD password…...
C语言AES加密解密字符串与16进制数据
文章目录 AES介绍C语言加密库加密解密16进制数据加密解密字符串数据base64编码aes加密字符串aes解密字符串解密中文字符加密库源代码AES介绍 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标…...
NIFI实现JSON转SQL并插入到数据库表中
说明 本文中的NIFI是使用docker进行安装的,所有的配置参考:docker安装Apache NIFI 需求背景 现在有一个文件,里面存储的是一些json格式的数据,要求将文件中的数据存入数据库表中,以下是一些模拟的数据和对应的数据库…...
【canal系】canal集群异常Could not find first log file name in binary log index file
这里先说明下这边使用的canal版本号为1.1.5 在描述这个问题之前,首先需要简单对于canal架构有个基本的了解 canal工作原理 canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议MySQL master 收到 dum…...
ESP32C3 PWM输出
目前对于遥控双发差速小飞机计划采用如下架构: ESP32C3做主控,兼具遥控收发和飞行控制锂电池供电,带电量检测双发,720空心杯电机,55mm桨,带电流检测MPU6050加速度计和陀螺仪预留4个控制信号输出 马达控制要…...
二、GoLang输出HelloWorld、基本数据类型、变量常量定义、基本类型转换
一、输入Hello World go语言中,想要输出内容到控制台,package必须是main,包括方法名也必须是main, go语言输出的语法是 fmt 库。 package mainimport "fmt"func main() {// go语言中 输出内容 使用的库是 fmt库fmt.Pr…...
mojo初体验
目录标题 mojo初体验试用地址变量定义参数可变性和所有权Structures后续 mojo初体验 试用地址 https://www.modular.com/get-started 与python基础语法很相似。 变量定义 let定义不可变变量var定义可变变量 参数可变性和所有权 下面是一个基本的函数: fn add…...
python3 重启docker方法
一、工作中的问题 工作中进行测试时,需要修改nacos配置,修改完成后再重启对应的docker容器,让配置生效,研究了下,使用docker库可以做到。 如何修改nacos配置可以参见我的另一篇文章,传送门 python3 修改…...
用Python的igraph和leidenalg搞定知识图谱布局:一个科研领域的可视化实战
科研知识图谱实战:用PythonLeiden算法揭示学科交叉规律 当你在文献海洋中寻找研究方向时,是否曾被复杂的学科交叉关系困扰?传统的关键词共现分析已经不能满足现代科研的需求。本文将带你用Python的igraph和leidenalg构建一个能自动识别学科社…...
【office2pdf】PPTX 字体解析与文本样式继承(PPTX_FONT_RESOLUTION.md)
摘要 本文档记录了 PPTX 保真度问题,该问题最初看起来像是布局错误, 但实际上是由不完整的字体和文本样式解析引起的。 可见的症状是多个幻灯片上的文本块,尤其是幻灯片 4 的"SKILLS"区域, 与 PowerPoint 不匹配&#x…...
LangFlow零代码AI应用搭建:5分钟可视化构建智能问答机器人
LangFlow零代码AI应用搭建:5分钟可视化构建智能问答机器人 1. LangFlow简介:零代码AI应用构建利器 LangFlow是一款革命性的可视化AI应用构建工具,它让不懂编程的用户也能轻松搭建智能问答机器人。想象一下,你只需要像搭积木一样…...
从电子管到全固态:中波广播发射机核心技术演进与选型指南
1. 中波广播发射机的前世今生 第一次见到中波发射机是在十年前参观某省级广播电台时,那座两层楼高的电子管设备让我印象深刻——嗡嗡作响的风扇、散发着热量的金属外壳、闪烁着微光的电子管,活像科幻电影里的场景。如今这种"大家伙"已经逐渐被…...
Pixel Epic效果展示:支持Markdown+LaTeX混合输出的学术论文初稿生成案例
Pixel Epic效果展示:支持MarkdownLaTeX混合输出的学术论文初稿生成案例 1. 像素史诗:科研写作的新范式 在传统学术写作工具普遍沉闷单调的背景下,Pixel Epic带来了一场视觉与功能双重革新的科研体验。这款基于AgentCPM-Report大模型的智能终…...
科哥二次开发Image-to-Video:性能提升39%,小白友好度大增
科哥二次开发Image-to-Video:性能提升39%,小白友好度大增 1. 项目背景与核心价值 Image-to-Video技术正在改变内容创作的方式,它能够将静态图片转化为生动的视频内容。然而,原始I2VGen-XL模型在实际应用中面临两大挑战ÿ…...
Go 协程池任务调度架构
Go 协程池任务调度架构:高并发任务的智慧引擎 在现代高并发编程中,Go语言的协程(goroutine)以其轻量级和高效性成为开发者的首选。无限制地创建协程可能导致资源耗尽,而协程池(goroutine pool)…...
手把手教你用Python处理脑电信号:从MRCP到SMR的实战指南
手把手教你用Python处理脑电信号:从MRCP到SMR的实战指南 脑电信号处理一直是神经科学和脑机接口领域的热门研究方向。对于开发者而言,掌握Python处理脑电信号的技能不仅能提升科研效率,还能为医疗辅助设备开发打下坚实基础。本文将带你从零开…...
Vue3+Cesium实战:解决404报错与Webpack配置优化指南
1. 为什么你的Cesium地图总是加载失败? 第一次在Vue3项目里集成Cesium时,我也被那些莫名其妙的404报错搞得焦头烂额。明明按照文档配置了,地图就是不显示,控制台一片红。后来才发现,90%的问题都出在资源路径配置上。 C…...
数字一阶低通滤波器在嵌入式系统中的应用:从理论到代码实现(附MATLAB验证)
数字一阶低通滤波器在嵌入式系统中的工程实践:从参数设计到代码优化 在嵌入式系统开发中,信号处理是一个永恒的话题。无论是传感器数据采集、电机控制还是通信系统,原始信号往往混杂着各种噪声。数字一阶低通滤波器以其计算量小、实现简单的特…...
