【LeetCode】并查集OJ

目录

1.省份数量 

2. 等式方程的可满足性


1.省份数量 

题目地址: 547. 省份数量 - 力扣(LeetCode)

解题思路:对于该题我们直接使用并查集,将可以直接的城市都归类一个集合,最后统计数组中集合的总数就是省份数了

解题代码:

class UnionFindSet//并查集
{
public:UnionFindSet(size_t n)//初始化数据:_ufs(n,-1){}int FindRoot(int n)//查找元素的根节点{int parent = n;while (_ufs[parent] >= 0){parent = _ufs[parent];}return parent;}void Union(int x, int y)//合并两个元素所在树{int root1 = FindRoot(x);int root2 = FindRoot(y);if (root1 == root2)//元素所在树都一样就没必要合并了return;if (root1 > root2)//取较小值的根节点来合并swap(root1, root2);_ufs[root1] += _ufs[root2];_ufs[root2] = root1;}size_t SetSize()//返回并查集中树的个数{size_t size = 0;for (auto e : _ufs){if (e < 0)++size;}return size;}private:vector<int> _ufs;
};class Solution {
public:int findCircleNum(vector<vector<int>>& isConnected) {UnionFindSet ufs(isConnected.size());for(int i=0;i<isConnected.size();++i){for(int j=0;j<isConnected[i].size();++j){if(isConnected[i][j]==1)//如果两个城市直接连接,就合并两个城市所在集合{ufs.Union(i,j);}}}return ufs.SetSize();//返回并查集中所有集合的个数}
};

2. 等式方程的可满足性

题目地址:990. 等式方程的可满足性 - 力扣(LeetCode)

解题思路:这题我们还是使用并查集的思路,由于该题最多只有26个字母所对应的数据,所以我们直接使用26个元素的vector来建立变量a-z的映射关系;我们先遍历一遍题目中所给关系,先将相等的变量都归类到一个集合中,之后再遍历一遍题目中所给关系,查找不相同的变量是否在一个集合中,如果有不相等的变量在同一个集合中就相悖了返回false即可

解题代码:

class UnionFindSet//并查集
{
public:UnionFindSet(size_t n)//初始化数据:_ufs(n,-1){}int FindRoot(int n)//查找元素的根节点{int parent = n;while (_ufs[parent] >= 0){parent = _ufs[parent];}return parent;}void Union(int x, int y)//合并两个元素所在树{int root1 = FindRoot(x);int root2 = FindRoot(y);if (root1 == root2)//元素所在树都一样就没必要合并了return;if (root1 > root2)//取较小值的根节点来合并swap(root1, root2);_ufs[root1] += _ufs[root2];_ufs[root2] = root1;}bool InSet(int x, int y)//判断两个元素是否在同一棵树{return FindRoot(x) == FindRoot(y);}private:vector<int> _ufs;
};class Solution {
public:bool equationsPossible(vector<string>& equations) {UnionFindSet ufs(26);//使用26个元素的vector代表字符变量a-zfor(auto &e: equations)//遍历一遍所给关系,先将相等的变量都归类到一个集合中{if(e[1]=='=')ufs.Union(e[0]-'a',e[3]-'a');}for(auto &e: equations)//再遍历一遍题目中所给关系,查找不相同的变量是否在一个集合中{if(e[1]=='!'&&ufs.InSet(e[0]-'a',e[3]-'a'))return false;}return true;}
};

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

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

相关文章

Linux Ubuntu部署SVN服务端结合内网穿透实现客户端公网访问

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

docker部署若依项目

目录 目录 一、搭建局域 二、redis安装 1.创建目录 2. redis.conf修改 三、MySQL安装 1. 安装 2. 设置远程连接 3. 创建数据库 四、若依后端项目搭建 1. 切换到家目录 2. 上传jar包 3. 上传Dockerfile文件 4. 构建镜像 5. 运行容器 6. 查看运行情况 7. 测试(自己…

实用干货!产品经理的进阶秘籍:必备的10项核心技能

在现代商业环境中&#xff0c;产品经理的角色变得愈发关键和多样化。成功的产品经理不仅需要深厚的行业知识&#xff0c;还要具备一系列多面手的技能&#xff0c;以应对不断变化的市场需求和竞争压力。本文将深入探讨产品经理必备的10项核心技能&#xff0c;揭示职场进阶的秘籍…

个推与华为深度合作,成为首批支持兼容HarmonyOS NEXT的服务商

自华为官方宣布HarmonyOS NEXT鸿蒙星河版开放申请以来&#xff0c;越来越多的头部APP宣布启动鸿蒙原生开发&#xff0c;鸿蒙生态也随之进入全新发展的第二阶段。 作为华为鸿蒙生态的重要合作伙伴&#xff0c;个推一直积极参与鸿蒙生态建设。为帮助用户在HarmonyOS NEXT上持续享…

MedSAM 项目排坑记录

MedSAM 项目排坑记录 任务排坑过程配置python环境测试构建docker模型训练数据预处理 单GPU训练最后推理 任务 做一个课程大作业&#xff0c;需要进行CVPR2024年医疗影像分割赛题的打榜&#xff08;CVPR 2024: SEGMENT ANYTHING IN MEDICAL IMAGES ON LAPTOP&#xff09;。看到…

买不到的数目c++

题目 输入样例&#xff1a; 4 7输出样例&#xff1a; 17 思路 一个字&#xff0c;猜。 一开始不知道怎么做的时候&#xff0c;想要暴力枚举对于特定的包装n, m&#xff0c;最大不能买到的数量maxValue是多少&#xff0c;然后观察性质做优化。那么怎么确定枚举结果是否正确呢…

内存管理 三大技术(覆盖交换虚存)

1.覆盖技术 程序显然比内存要大的 因为A的话要调用很多&#xff0c;bc &#xff0c;所以把A放在了常驻区域&#xff0c;然后bc 再同一个分区&#xff0c;如果B调用的话那么这50k就是b在调用&#xff0c;DEF的话三的共享&#xff0c;需要的话就从内存中划拨出来。C在调E的时候&…

局域网管理工具

每个组织的业务运营方法都是独一无二的&#xff0c;其网络基础设施也是如此&#xff0c;由于随着超融合基础设施等新计算技术的发展&#xff0c;局域网变得越来越复杂&#xff0c;因此局域网管理也应该如此&#xff0c;组织需要量身定制的局域网管理解决方案&#xff0c;这些解…

VBA技术资料MF127:移动文件覆盖目标文件

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Vivado HLS学习笔记

任意精度的数据类型 u 代表 unsigned&#xff0c;fixed代表定点数据&#xff0c;即常数 采用任意精度的数据类型可以使用更少的资源&#xff0c;硬件友好性 数据类型定义在 header file 中 表示任意进制 ap_int<6> a("101010",2); //二进制数据101010 ap_in…

overleaf latex 笔记

overleaf: www.overleaf.com 导入.tex文件 1.代码空一行&#xff0c;代表文字另起一段 2. 1 2 3 排序 \begin{enumerate} \item \item \item \end{enumerate} 3.插入图片 上传图片并命名 \usepackage{float}导包\begin{figure}[H]&#xff1a;表示将图…

四个有用的Android开发技巧

一. 通过堆栈快速定位系统版本 这个地方主要分享大家两个个技巧&#xff0c;通过问题堆栈简快速定位当前系统版本&#xff1a; 1. 快速区分当前系统版本是Android10以下&#xff0c;还是Android10及以上&#xff1b; 首先Android10及以上引入了一个新的服务Service&#xff…