当前位置: 首页 > news >正文

并查集---力扣547省份的数量

假设:有一群小混混打架,小弟们可能互相不认识,如果要确定他们是一伙的,就需要确定他们的组长是不是一个,但是每个组长的领导可能又不一样,所以要找到最大的那个领导,才能确定是一伙的。

我们先初始化一个数组,用来存储每个成员的领导,初始化每个成员的领导就是他自己。

   void init(int[] pre) {for (int i = 0; i < pre.length; i++) {pre[i]=i;}}

通过find方法来寻找每位成员的直属领导

  //查找元素的最高上级int find(int x,int [] pre){//因为初始化的时候,我们将所有元素的最高级设为自己//所以最高级是自己的元素即为最高级元素while (pre[x]!=x){//如果当前元素不是最高级,继续去找它上级的上级x=pre[x];}return x;}

但是可能存在着这样的关系,A的领导是B,B的领导是C,C的领导是D。甲的领导是乙,乙的领导是丙,丙的领导是丁。这样就意味着存在两个组织。但是丙又成为了B的领导,所以这两个资质就需要进行合并成为一个组织。

对应以下代码

 //合并void merge(int x,int y,int pre[]){int a=find(x,pre);int b=find(y,pre);pre[a]=b;}

力扣链接:547. 省份数量 - 力扣(LeetCode)

class Solution {//查找元素的最高上级int find(int x,int [] pre){//因为初始化的时候,我们将所有元素的最高级设为自己//所以最高级是自己的元素即为最高级元素while (pre[x]!=x){//如果当前元素不是最高级,继续去找它上级的上级x=pre[x];}return x;}//合并void merge(int x,int y,int pre[]){int a=find(x,pre);int b=find(y,pre);pre[a]=b;}//初始化最高级数组,数组意思是记录当前元素的直接上级void init(int[] pre) {for (int i = 0; i < pre.length; i++) {pre[i]=i;}}public int findCircleNum(int[][] isConnected) {int pre[] = new int[isConnected.length];//元素的数量init(pre);for (int i = 0; i < isConnected.length; i++) {for (int j = 0; j < isConnected[i].length; j++) {if(i!=j){if(isConnected[i][j]==1){merge(i,j,pre);}}}}int count=0;for (int i = 0; i < pre.length; i++) {if(pre[i]==i){count++;}}return count;}
}

http://www.lryc.cn/news/326864.html

相关文章:

  • stm32启动文件里面的__main和主函数main()
  • 曲线生成 | 图解Reeds-Shepp曲线生成原理(附ROS C++/Python/Matlab仿真)
  • 深入探讨iOS开发:从创建第一个iOS程序到纯代码实现全面解析
  • Python学习之-正则表达式
  • Godot.NET C# 工程化开发(1):通用Nuget 导入+ 模板文件导出,包含随机数生成,日志管理,数据库连接等功能
  • 数据仓库——雪花模式以及层次递归
  • Transformer的前世今生 day09(Transformer的框架概述)
  • Qt 压缩/解压文件
  • 【leetcode刷题之路】面试经典150题(8)——位运算+数学+一维动态规划+多维动态规划
  • JetBrains全家桶激活,分享 WebStorm 2024 激活的方案
  • Sublime 彻底解决中文乱码
  • 复旦大学EMBA校友出席两会建言献策助力中国发展
  • virtualbox导入vdi
  • 【信号处理】基于DGGAN的单通道脑电信号增强和情绪检测(tensorflow)
  • 使用 Docker Compose 部署 Spring Boot 应用
  • nginx 正向代理 https
  • vue3从其他页面跳转页面头部组件菜单el-menu菜单高亮
  • python 条件循环语句
  • CIM搭建实现发送消息的效果
  • C++第十三弹---内存管理(下)
  • Python爬虫学习完整版
  • JavaScript中的继承方式详解
  • Git基础(23):Git分支合并实战保姆式流程
  • 为什么有些前端一直用 div 当按钮,而不是用 button?
  • python实战之基础篇(一)
  • 第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(补题)
  • 蓝桥杯刷题--python-32
  • 单例模式如何保证实例的唯一性
  • IntelliJ IDE 插件开发 | (七)PSI 入门及实战(实现 MyBatis 插件的跳转功能)
  • 【教程】iOS如何抓取HTTP和HTTPS数据包经验分享