每日一题--最长连续序列

洛阳春-岑参

人到洛阳花似锦,偏我来时不逢春。

谁道三冬无春色,冰山高处万里银

目录

题目描述

思路分析

方法及其时间复杂度

法一 暴力枚举:

法二 哈希表遍历:

法三 并查集:

个人总结


题目描述

128. 最长连续序列 - 力扣(LeetCode) 

思路分析

先预处理排序,再枚举所有连续区间并计算长度,选择最大的连续区间最长的那个。

方法及其时间复杂度

法一 暴力枚举:

class Solution {
public:int longestConsecutive(vector<int>& nums) {sort(nums.begin(),nums.end());//先排序数组int n=nums.size();if(n==1) return 1; //为了防止下标越界,特殊处理int ans=0,Maxn=1; //记录最后答案,和记录连续区间的长度for(int i=1;i<n;++i){while(i<n&&(nums[i]==nums[i-1]+1||nums[i]==nums[i-1])){ //进入连续区间if(nums[i]==nums[i-1]) i++; //数字相同时,下标加1else   Maxn++,i++; //不相同说明连续,则计数器加1,下标加1}ans=max(Maxn,ans);  //每一个连续区间结束,选择最大的连续区间数作为答案Maxn=1;  //重置计数为1}return ans;}
};

时间复杂度O(nlogn) 排序的时间nlogn,遍历时间复杂度O(n)

法二 哈希表遍历:

  将数组全部插入哈希表,然后遍历哈希表,如果当前数-1在哈希表中不存在,就设当前数为连续区间的起点,一直在哈希表中查找当前的下一个,找到计数器加1,直到找不到为止,在更新最大值作为答案。

class Solution {
public:int longestConsecutive(vector<int>& nums) {unordered_set<int> hash(nums.begin(),nums.end());  //将所有数插入哈希表int ans=0;for(const auto& x:hash){  //遍历哈希表if(!hash.count(x-1)){  //如果该数-1没有在哈希表,可以作为起点int y=x+1;  while(hash.count(y)) y++; //一直查找下一个数,直到找不到为止ans=max(ans,y-x);  //取每个区间的最大长度}}return ans;}
};

时间复杂度O(n),空间复杂度O(n)

法三 并查集:

假定原数组中的每个元素都以自己本身为根的集合,且每个集合大小都是1。

遍历数组元素,如果集合中存在当前元素-1或+1则合并到一个集合中。最后返回集合最大那个大小

 

class Solution {
public:unordered_map<int,int> pre; unordered_map<int,int> sz;int root(int x){while(pre[x]!=x) x=pre[x];  //循环找根节点return x;}void merge(int x,int y){  //启发式合并,合并两个集合x=root(x),y=root(y);if(x==y) return ;if(sz[x]>sz[y])swap(x,y);pre[x]=y;sz[y]+=sz[x];}int longestConsecutive(vector<int>& nums) {for(const auto& x:nums){if(!pre.count(x)) pre[x]=x,sz[x]=1;  //初始化并查集if(pre.count(x-1)) merge(x,x-1);    //如果存在x-1或x+1则合并if(pre.count(x+1)) merge(x,x+1);}int ans=0;for(const auto& t:sz){  //查找合并集合里最大的ans=max(ans,t.second);}return ans;}
};

 时间复杂度O(nlogn) 空间复杂度O(n)

个人总结

多日没刷题,又怀念刷题的感觉,今日重启每日一诗系列

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

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

相关文章

独立服务器和云计算各有什么优势

独立服务器和云计算各有什么优势 一、性能 独立服务器&#xff1a;独立服务器提供了独享的硬件资源&#xff0c;通常具有更高的性能和更稳定的性能表现。对于对性能有较高需求的任务&#xff0c;如大数据处理、游戏服务器等&#xff0c;独立服务器是更好的选择。 云计算&…

Java安全篇-Fastjson漏洞

前言知识&#xff1a; 一、json 概念&#xff1a; json全称是JavaScript object notation。即JavaScript对象标记法&#xff0c;使用键值对进行信息的存储。 格式&#xff1a; {"name":"wenda","age":21,} 作用&#xff1a; JSON 可以作为…

网络工程师实验命令(华为数通HCIA)

VRP系统的基本操作 dis version #查看设备版本信息 sys #进入系统视图 system-name R1 #改设备名字为R1进入接口配置IP地址 int g0/0/0 ip address 192.168.1.1 255.255.255.0 #配置接口地址为192.168.1.1/255.255.255.0 ip address 192.168.1.2 24 sub #此…

Apache Hive的基本使用语法(二)

Hive SQL操作 7、修改表 表重命名 alter table score4 rename to score5;修改表属性值 # 修改内外表属性 ALTER TABLE table_name SET TBLPROPERTIES("EXTERNAL""TRUE"); # 修改表注释 ALTER TABLE table_name SET TBLPROPERTIES (comment new_commen…

二维双指针,滑动窗口

二维双指针 思路&#xff1a;考虑暴力做法&#xff0c;我们统计前缀和&#xff0c;然后枚举以 ( x 1 , y 1 ) (x_1,y_1) (x1​,y1​), ( x 2 , y 2 ) (x_2,y_2) (x2​,y2​)为左上&#xff0c;右下顶点的矩阵有多少是合法的&#xff0c;那么&#xff0c;这样的时间复杂度为 n 4…

[k8s] kubectl执行失败后等待一段时间再重试 (Shell实现)

使用Shell脚本实现功能&#xff1a; kubectl执行失败后&#xff0c;等待30秒后再重试&#xff0c;一共重试3次&#xff0c;代码如下&#xff1a; #!/bin/bashKUBECTL_BIN/var/lib/snapd/snap/bin/kubectlERR_MSG_K8S_NOTRUNNING"microk8s is not running" ERR_MSG_C…

【二十七】【算法分析与设计】归并(1),912. 排序数组,归并排序,递归函数的时间复杂度计算,LCR 170. 交易逆序对的总数

912. 排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 提示&#xff1a; 1 < …

Linux 系统 CentOS7 上搭建 Hadoop HDFS集群详细步骤

集群搭建 整体思路:先在一个节点上安装、配置,然后再克隆出多个节点,修改 IP ,免密,主机名等 提前规划: 需要三个节点,主机名分别命名:node1、node2、node3 在下面对 node1 配置时,先假设 node2 和 node3 是存在的 **注意:**整个搭建过程,除了1和2 步,其他操作都使…

go中方法的Receiver (值类型指针类型)

在Go语言中&#xff0c;方法的接收者&#xff08;Receiver&#xff09;定义了该方法是与哪种类型的变量关联。方法的接收者可以是值类型也可以是指针类型&#xff0c;这决定了调用方法时是如何传递接收者的。 值类型与指针类型接收者 值类型接收者 当方法的接收者是值类型时&a…

自然语言处理(NLP)基础:文本预处理与词嵌入

目录 1.引言 2.文本预处理步骤 3.文本预处理工具 4.词嵌入模型介绍与应用 4.1.Word2Vec 4.2.GloVe 4.3.应用示例 5.总结 1.引言 自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;是计算机科学与人工智能领域的重要分支&#xff0c;旨在使计算机理…

ChatGPT 商业金矿(下)

原文&#xff1a;ChatGPT Business Goldmines 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十七章&#xff1a;ChatGPT 商业金矿#15&#xff1a;在线课程创建业务 随着人们寻求便捷灵活的学习新技能、推进职业或探索新爱好的方式&#xff0c;在线课程变得越来越受…

基于Redis实现延时任务

两种方案&#xff1a; Redis 过期事件监听Redisson 内置的延时队列 Redis 过期事件监听这种方案存在很多问题&#xff0c;建议使用 Redisson 内置的 DelayedQueue 方案。 Redis 过期事件监听实现延时任务原理 Redis 2.0 引入了发布订阅 (pub/sub) 功能。 在 pub/sub 模式下…

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models 相关链接&#xff1a;arxiv 关键字&#xff1a;Vision Language Models、Multi-modality、High-Resolution Visual Tokens、High-Quality Data、VLM-guided Generation 摘要 在这项工作中&#x…

unity学习(76)--窗口化和后台运行

1.通过如下方式将编译的游戏设置为窗口模式。 成功&#xff1a; 2.现在只有鼠标点击的窗体游戏运动&#xff0c;其他窗体游戏都会卡住。 2.1build setting中 2.2unity内部Project Settings 也被同步修改了

火车头通过关键词采集文章的原理

随着互联网信息的爆炸式增长&#xff0c;网站管理员和内容创作者需要不断更新和发布新的文章&#xff0c;以吸引更多的用户和提升网站的排名。而火车头作为一款智能文章采集工具&#xff0c;在这一过程中发挥着重要作用。本文将探讨火车头如何通过关键词采集文章&#xff0c;以…

CDH集群hive初始化元数据库失败

oracle数据库操作&#xff1a; 报错如下&#xff1a;命令 (Validate Hive Metastore schema (237)) 已失败 截图如下&#xff1a; 后台日志部分摘录&#xff1a; WARNING: Use “yarn jar” to launch YARN applications. SLF4J: Class path contains multiple SLF4J binding…

Vite 为什么比 Webpack 快?

目录 1. Webpack 的构建原理 2. Script 的模块化&#xff08;主流浏览器对 ES Modules 的支持&#xff09; 3. Webpack vs Vite 开发模式的差异 对 ES Modules 的支持 底层语言的差异 热更新的处理 1. Webpack 的构建原理 前端之所以需要类似于 Webpack 这样的构建工具&…

主机安全-德迅卫士

什么是主机安全&#xff1f; 主机安全&#xff0c;其核心内容包括安全应用交付系统、应用监管系统、操作系统安全增强系统和运维安全管控系统。它的具体功能是指保证主机在数据存储和处理的保密性、完整性&#xff0c;可用性&#xff0c;它包括硬件、固件、系统软件的自身安全&…

CMakeLists生成动态库.so和静态库.a

一、下载NDK CMake - NDK : 26.2.11394342 或 23.1.7779620 - CMake : 3.22.1 二、新建android\app\CMakeLists.txt 文件CMakeLists.txt内容 cmake_minimum_required(VERSION 3.4.1) #mker为项目名称 project(mker)#设置生成的so动态库最后输出的路径 set(CMAKE_LIBRARY_OUTP…

如何安装OceanBase的OBD

选择一&#xff1a;借助 all-in-one 安装包安装 OBD&#xff08;推荐&#xff09; OceanBase 社区版的all-in-one安装包是一个集成了多种工具的一键式安装包。它包含了数据库软件本身&#xff0c;以及OBD、OBProxy、OBClient&#xff0c;自4.1版本起&#xff0c;还额外加入了O…