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

news2024/12/1 0:41:38

目录

并查集定义

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.coloradmin.cn/o/2191497.html

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

相关文章

毕业设计选题:基于ssm+vue+uniapp的医院管理系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

管道内裂缝检测数据集 2000张 管道裂缝 带标注voc yol

管道内裂缝检测数据集 2000张 管道裂缝 带标注voc yol 管道内裂缝检测数据集 (Pipeline Crack Detection Dataset) 数据集概述 该数据集是一个专门用于训练和评估管道内裂缝检测模型的数据集。数据集包含2000张图像&#xff0c;每张图像都带有标注信息&#xff0c;标注格式为…

JavaScript中的高阶函数

高阶函数 所谓高阶函数&#xff0c;就是操作函数的函数&#xff0c;它接收一个或多个函数作为参数&#xff0c;并返回一个新函数&#xff1a; 来看一个mapper()函数&#xff0c;将一个数组映射到另一个使用这个函数的数组上&#xff1a; 更常见的例子&#xff0c;它接收两个函…

【Kubernetes】常见面试题汇总(五十六)

目录 123. pod 创建失败&#xff1f; 124. kube-flannel-ds-amd64-ndsf7 插件 pod 的 status 为 Init:0/1 &#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#x…

5G NR物理信号

文章目录 NR 物理信号与LTE的区别上行参考信号DMRS (UL)SRSPT-RS(UL) 下行参考信号DMRS(DL)PT-RS(DL)CSI-RSPSSSSS NR 物理信号与LTE的区别 用SSS、CSI-RS和DMRS 取代了CRS信号。下行业务信道采用TM1波束赋形传输模式。基于SSB 或者CSI-RS进行RSRP和SINR测量。基于DMRS 进行共…

Golang | Leetcode Golang题解之第457题环形数组是否存在循环

题目&#xff1a; 题解&#xff1a; func circularArrayLoop(nums []int) bool {n : len(nums)next : func(cur int) int {return ((curnums[cur])%n n) % n // 保证返回值在 [0,n) 中}for i, num : range nums {if num 0 {continue}slow, fast : i, next(i)// 判断非零且方…

linux—进程控制

进程创建 使用fork函数可以在一个进程中创建一个子进程 fork函数 #include <stdio.h> #include <unistd.h> #include <sys/types.h> int main() {printf("begin: 我是一个进程&#xff0c;pid: %d,ppid:%d\n",getpid(),getppid());pid_t id fo…

Java项目实战II基于Java+Spring Boot+MySQL的宠物咖啡馆平台的设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 在快节奏的城市生活中&#xff0c;宠物咖啡馆作为一种结合了休闲与宠物陪伴的新型业态&#xff0c;正…

数据服务-实时同步(sersync)

1. 概述 1.之前我们通过rsync定时任务实现定时备份/同步 2. 对于NFS我们需要进行实时同步 2. Sersync原理 3. 上手指南 环境主机web0110.0.0.7(nfs客户端)nfs0110.0.0.31(rsync客户端) (nfs服务端)backup10.0.0.41(rsync服务端) 3.1 rsync服务端准备 参考: 数据服务-备份服务…

[c++高阶] 继承深度剖析

1.前言 继承 是 面向对象三大特性之一&#xff08;封装、继承、多态&#xff09;&#xff0c;所有的面向对象&#xff08;OO&#xff09;语言都具备这三个基本特征&#xff0c;封装相关概念已经在《类和对象》系列中介绍过了&#xff0c;今天主要学习的是 继承&#xff0c;即如…

RTX4060+ubuntu22.04+cuda11.8.0+cuDNN8.6.0 如何根据显卡型号和系统配置cuda和cuDNN所需的安装环境

文章目录 &#x1f315;电脑原配置&#x1f315;安装cuda和cuDNN前的环境选择&#x1f319;cuDNN与CUDA tookit和nvidia driver的对应关系&#x1f319;cuda版本选择⭐查看自己的nvidia driver版本和最大支持的CUDA版本⭐最小支持版本 &#x1f319;查看11.8.0版本的cuda和ubun…

前端学习——CSS——李白代表作品页面(3)

上传资源的地方&#xff1a;http://download.csdn.net/ 项目要求部分&#xff08;1&#xff09; &#xff1a; 支撑知识点&#xff1a; 1.CSS附加方式——外部样式表&#xff1a; --->链接式外部样式表 语法&#xff1a; 在head标签里边写link单标签&#xff0c;其中再…

认知杂谈99《打工人 警惕 画饼》

内容摘要&#xff1a; 领导心理游戏是指领导者利用甜言蜜语和虚假承诺来操控员工情感&#xff0c;使员工产生依赖和盲目信任的行为。他们常以美好未来的描绘来吸引员工&#xff0c;但这些承诺往往难以实现。 员工之所以容易陷入这种心理游戏&#xff0c;是因为他们渴望得到情感…

Golang | Leetcode Golang题解之第455题分发饼干

题目&#xff1a; 题解&#xff1a; func findContentChildren(g []int, s []int) (ans int) {sort.Ints(g)sort.Ints(s)m, n : len(g), len(s)for i, j : 0, 0; i < m && j < n; i {for j < n && g[i] > s[j] {j}if j < n {ansj}}return }

进阶岛第4关:InternVL 多模态模型部署微调实践

准备InternVL模型 我们使用InternVL2-2B模型。该模型已在share文件夹下挂载好&#xff0c;现在让我们把移动出来。 mkdir -p /root/project/joke/modelcp -r /root/share/new_models/OpenGVLab/InternVL2-2B /root/project/joke/model # 不用ln -s 准备环境 这里我们来手动配…

k8s 中微服务之 MetailLB 搭配 ingress-nginx 实现七层负载

目录 1 MetailLB 搭建 1.1 MetalLB 的作用和原理 1.2 MetalLB功能 1.3 部署 MetalLB 1.3.1 创建deployment控制器和创建一个服务 1.3.2 下载MealLB清单文件 1.3.3 使用 docker 对镜像进行拉取 1.3.4 将镜像上传至私人仓库 1.3.5 将官方仓库地址修改为本地私人地址 1.3.6 运行清…

【24最新亲试】ubuntu下载go最新版本

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了工具配置的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于Ubuntu 升级 golang 版本完美步骤进行的&#xff0c;每个知识点的修…

算法笔记(十一)——优先级队列(堆)

文章目录 最后一块石头的重量数据流中的第 K 大元素前K个高频单词数据流的中位数 优先级队列是一种特殊的队列&#xff0c;元素按照优先级从高到低&#xff08;或从低到高&#xff09;排列&#xff0c;高优先级的元素先出队&#xff0c;可以用 堆来实现 堆是一种二叉树的结构&…

Python 语言学习——应用1.2 数字图像处理(第二节,变换)

目录 1.基础知识 1.图像几何变换概念 2.图像几何变换方式 3.插值运算 4.几何变换步骤 2.各类变换 1.位置变换 2.形状变换 3.代数运算 3.实战演练 1.基础知识 1.图像几何变换概念 在图像处理过程中&#xff0c;为了观测需要&#xff0c;常常需要对 图像进行几何变换&am…

EXCEL_光标百分比

Public Sub InitCells()Dim iSheet As LongFor iSheet Sheets.Count To 1 Step -1Sheets(iSheet).ActivateActiveWindow.Zoom 85ActiveWindow.ScrollRow 1ActiveWindow.ScrollColumn 1Sheets(iSheet).Range("A1").ActivateNext iSheetEnd Sub对日项目中的文档满天…