并查集——从LeetCode题海中总结常见套路

目录

并查集定义

LeetCode128.最长连续序列

先去重再sort:

改进去重的方法:

参考:


并查集定义

在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(Union-find Algorithm)定义了两个用于此数据结构的操作:

    Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。
    Union:将两个子集合并成同一个集合。
    由于支持这两种操作,一个不相交集也常被称为联合-查找数据结构(Union-find Data Structure)或合并-查找集合(Merge-find Set)。

为了更加精确的定义这些方法,需要定义如何表示集合。一种常用的策略是为每个集合选定一个固定的元素,称为代表,以表示整个集合。接着,Find(x)Find(x)Find(x) 返回 xxx 所属集合的代表,而 Union 使用两个集合的代表作为参数。

LeetCode128.最长连续序列

先去重再sort:

不满足O(N)复杂度的要求,但是却可以击败99%,离谱……

class Solution {
public:int longestConsecutive(vector<int>& nums) {if (nums.empty())return 0;int ans = 1, len = 0;// 去重unordered_set<int> s(nums.begin(), nums.end());vector<int> v(s.begin(), s.end());sort(v.begin(), v.end());for (int i = 1; i < v.size(); i++) {if (v[i] == v[i - 1] + 1) {len++;} else {if (len == 0) {continue;} else {ans = max(ans, len + 1);len = 0;}}}// 进行到最后一个字符的时会出现统计疏漏,需要特别判断一下if (len != 0) {ans = max(ans, len + 1);len = 0;}return ans;}
};

改进去重的方法:

很快提高了空间复杂度!理论上时间复杂度是有提高的,但是LeetCode大数测试点肯定是有问题的……

class Solution {
public:int longestConsecutive(vector<int>& nums) {if (nums.empty())return 0;int ans = 1, len = 0;sort(nums.begin(), nums.end());for (int i = 1; i < nums.size(); i++) {if (nums[i] == nums[i - 1]) // 改进去重的过程continue;if (nums[i] == nums[i - 1] + 1) {len++;} else {if (len == 0) {continue;} else {ans = max(ans, len + 1);len = 0;}}}// 进行到最后一个字符的时会出现统计疏漏,需要特别判断一下if (len != 0) {ans = max(ans, len + 1);len = 0;}return ans;}
};

参考:

  • 力扣

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

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

相关文章

重学SpringBoot3-集成Redis(四)之Redisson

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;四&#xff09;之Redisson 1. 添加 Redisson 依赖2. 配置 Redisson 客户端3. 使用 Redisson 实现分布式锁4. 调用分布式锁5. 为什…

会声会影导出视频mp4格式哪个最高清,会声会影输出格式哪个清晰

调高分辨率后&#xff0c;mp4视频还是不清晰。哪怕全部使用4K级素材&#xff0c;仍然剪不出理想中的高画质作品。不是你的操作有问题&#xff0c;而是剪辑软件没选对。Corel公司拥有全球顶尖的图像处理技术&#xff0c;该公司研发的会声会影视频剪辑软件&#xff0c;在过去的20…

Linux性能调优技巧

目录 前言1. CPU性能优化1.1 调整CPU调度策略1.2 合理分配多核处理 2. 内存性能优化2.1 调整内存分配策略2.2 缓存和分页优化 3. 磁盘I/O性能优化3.1 使用合适的I/O调度器3.2 磁盘分区和文件系统优化 4. 网络性能优化4.1 优化网络参数4.2 调整网络拥塞控制算法 5. 系统监控与优…

20款奔驰CLS300升级原厂抬头显示HUD 23P智能辅助驾驶 触摸屏人机交互系统

以下是为您生成的一份关于 18 款奔驰 CLS 老款改新款的改装文案&#xff1a; 18 款奔驰 CLS 老款改新款&#xff1a;科技升级&#xff0c;畅享极致驾驶体验 在汽车改装的世界里&#xff0c;每一次的升级都是对卓越的追求。今天&#xff0c;让我们一同探索 18 款奔驰 CLS 老款改…

arm-伪指令

在汇编语言中&#xff0c;特别是在与ARM架构相关的汇编语言中&#xff0c;ADR、ADRL、LDR 和 NOP 是具有特定功能的指令或伪指令。下面是对这些术语在ARM汇编语言中的详细解释&#xff1a; LDR&#xff08;Load Register&#xff09; 定义&#xff1a;LDR是一个指令&#xff…

代码随想录训练营第48天|单调栈

739. 每日温度 class Solution { public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<int> st;st.push(0);int ntemperatures.size();vector<int> res(n,0);for(int i1; i<n; i){while(!st.empty()&&temperatur…

重塑数字时代的生存法则:IT部门的转型与重生

在当下大环境低迷&#xff0c;经济寒冬之下&#xff0c;某数字化转型大群的一则令人震惊的消息如巨石投湖&#xff0c;激起了层层涟漪——某集团公司宣布全面裁撤IT团队&#xff0c;无一幸免。这一决定&#xff0c;不仅让群内的IT同仁们愕然失色&#xff0c;更引发了行业内外对…

记一次教学版内网渗透流程

信息收集 如果觉得文章写的不错可以共同交流 http://aertyxqdp1.target.yijinglab.com/dirsearch dirsearch -u "http://aertyxqdp1.target.yijinglab.com/"发现 http://aertyxqdp1.target.yijinglab.com/joomla/http://aertyxqdp1.target.yijinglab.com/phpMyA…

Python网络编程:开启你的网络之旅

引言 你有没有想过&#xff0c;为什么我们能在几秒钟内从世界的另一端获取信息&#xff1f;这背后&#xff0c;正是网络编程的魔力&#xff01;在这个数字化的时代&#xff0c;掌握网络编程不仅能让你在技术上游刃有余&#xff0c;还能为你的职业生涯增添一笔亮丽的色彩。今天…

知识图谱入门——3:工具分类与对比(知识建模工具:Protégé、 知识抽取工具:DeepDive、知识存储工具:Neo4j)

在知识图谱构建的过程中&#xff0c;针对不同的任务和需求&#xff0c;我们可以使用多种工具。为了帮助你快速选择合适的工具&#xff0c;本文将常用工具按类别进行分类介绍&#xff0c;并对比其优缺点&#xff0c;方便你在不同场景中做出最佳选择。 文章目录 1. 知识建模工具…

Windows Ubuntu下搭建深度学习Pytorch训练框架与转换环境TensorRT

Windows Ubuntu下搭建深度学习Pytorch训练框架与转换环境TensorRT JetBrains2024&#xff08;IntelliJ IDEA、PhpStorm、RubyMine、Rider……&#xff09;安装包Anaconda Miniconda安装.condarc 文件配置镜像源查看conda的配置和源(channel)自定义conda虚拟环境路径conda常用命…

el-pagination组件封装

组件使用 源代码&#xff1a; <script setup> import Pagination from /components/pagination/index.vue import {ref} from "vue";const pageNum ref(1) const pageSize ref(10) const total ref(120)function loadData() {// 加载数据 } </script>…

H.264编解码工具 - NVIDIA CUDA

一、简介 NVIDIA CUDA编解码是一项采用NVIDIA图形处理器(GPU)来加速视频编码和解码的技术。CUDA(Compute Unified Device Architecture)是一种并行计算平台和编程模型,允许开发者使用GPU来进行通用计算。 优点: 加速编解码速度:CUDA编解码利用GPU的并行处理能力,可以…

RabbitMQ 工作方式详解

RabbitMQ 是一个开源的消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;。RabbitMQ 允许应用程序或系统以异步的方式交换数据&#xff0c;从而提高了系统的可扩展性和容错性。本文将详细介绍 RabbitMQ 的工作方式&#xff0c;包括其核心概念、消…

【Unity】unity安卓打包参数(个人复习向/有不足之处欢迎指出/侵删)

1.Texture Compression 纹理压缩 设置发布后的纹理压缩格式 Use Player Settings:使用在播放器设置中设置的纹理压缩格式 ETC&#xff1a;使用ETC格式&#xff08;兼容&#xff09; ETC2&#xff1a;使用ETC2格式&#xff08;很多设备不支持&#xff09; ASTC&#xff1a;使用…

腾讯云服务器上使用Nginx部署的静态网站打开速度慢的原因分析及优化解决方案

目录 前言1. 网站打开速度慢的原因分析1.1 服务器配置不足1.2 网络延迟1.3 Nginx配置不合理1.4 静态资源未优化 2. 网站速度的测试与分析2.1 使用浏览器开发者工具分析2.2 在线工具测试 3. 网站优化的具体方法3.1 服务器配置优化3.2 CDN加速与DNS优化3.3 优化Nginx配置3.3.1 启…

Django一分钟:DRF ViewSet烹饪指南,创建好用的视图集

本文将介绍django视图集的内部实现&#xff0c;并带你重写部分代码自己组装强大且趁手的视图集&#xff0c;以满足自定义的业务需求&#xff0c;避免编写大量重复代码。 一、基础知识 Django Rest framework框架允许你将一组相关视图的逻辑组合到一个类中&#xff0c;也就是我…

PCIe6.0 AIC金手指和板端CEM连接器信号完整性设计规范

先附上我之前写的关于PCIe5.0金手指的设计解读&#xff1a; PCIe5.0的Add-in-Card(AIC)金手指layout建议&#xff08;一&#xff09;_pcie cem-CSDN博客 PCIe5.0的Add-in-Card(AIC)金手指layout建议&#xff08;二&#xff09;_gnd bar-CSDN博客 首先&#xff0c;相较于PCI…

《深度学习》【项目】OpenCV 发票识别 透视变换、轮廓检测解析及案例解析

目录 一、透视变换 1、什么是透视变换 2、操作步骤 1&#xff09;选择透视变换的源图像和目标图像 2&#xff09;确定透视变换所需的关键点 3&#xff09;计算透视变换的变换矩阵 4&#xff09;对源图像进行透视变换 5&#xff09;对变换后的图像进行插值处理 二、轮廓检测…

Python | Leetcode Python题解之第454题四数相加II

题目&#xff1a; 题解&#xff1a; class Solution:def fourSumCount(self, A: List[int], B: List[int], C: List[int], D: List[int]) -> int:countAB collections.Counter(u v for u in A for v in B)ans 0for u in C:for v in D:if -u - v in countAB:ans countAB…