leetcode算法题:省份数量

leetcode算法题547
链接:https://leetcode.cn/problems/number-of-provinces

题目

有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。

省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。

给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。

返回矩阵中 省份 的数量。

示例 1:
在这里插入图片描述

输入:isConnected = [[1,1,0],[1,1,0],[0,0,1]]
输出:2
示例 2:
在这里插入图片描述

输入:isConnected = [[1,0,0],[0,1,0],[0,0,1]]
输出:3

解法

使用并查集

	public static int findCircleNum(int[][] M) {
		if (M == null || M.length == 0) {
			return 0;
		}
		int length = M.length;
		UnionFind unionFind = new UnionFind(length);
		for (int i = 0; i < length; i++) {
			for (int j = i + 1; j < length; j++) {
				if (M[i][j] == 1) {
					unionFind.union(i, j);
				}
			}
		}
		return unionFind.getSize();
	}

	public static class UnionFind {
		private int[] parents;
		private int[] childSizes;
		private int size;

		public UnionFind(int N) {
			parents = new int[N];
			childSizes = new int[N];
			size = N;
			for (int i = 0; i < N; i++) {
				// 表示第i个位置的父节点为自己
				parents[i] = i;
				// 表示第i位置的子节点数
				childSizes[i] = 1;
			}
		}

		private int findParent(int index) {
			Stack<Integer> stack = new Stack<Integer>();
			// 从节点开始一直找到最上的父节点
			while (index != parents[index]) {
				stack.push(index);
				index = parents[index];
			}

			// 自己不是父节点,需要设置父节点
			while (!stack.isEmpty()) {
				parents[stack.pop()] = index;
			}
			return index;
		}

		public void union(int x, int y) {
			int a = findParent(x);
			int b = findParent(y);
			// 父节点不一样,需要合并
			if (a != b) {
				// 哪个子节点多,哪个成为父节点
				if (childSizes[a] >= childSizes[b]) {
					parents[b] = a;
					childSizes[a] += childSizes[b];
				} else {
					parents[a] = b;
					childSizes[b] += childSizes[a];
				}
				size--;
			}
		}

		public int getSize() {
			return size;
		}
	}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c#按照时间进行数据存储(不用数据库)

概要介绍 按照日期生成文件夹&#xff0c;按照时间生成文件名&#xff0c;存储字符串。 可以用于简单数据记录&#xff08;如果数据存储考虑格式文本&#xff0c;保存为csv格式&#xff09; 实现效果 调用方法 SaveText.saveStr("测试字符串"DateTime.Now.ToStrin…

6.3 C++11 原子操作与原子类型

一、原子类型 1.多线程下的问题 在C中&#xff0c;一个全局数据在多个线程中被同时使用时&#xff0c;如果不加任何处理&#xff0c;则会出现数据同步的问题。 #include <iostream> #include <thread> #include <chrono> long val 0;void test() {for (i…

C语言算法~BF算法和KMP算法

各位CSDN的各位你们好啊&#xff0c;今天小赵要给大家分享一个算法方面的知识这个算法也是小赵琢磨了好久&#xff0c;才算把它理明白&#xff0c;今天小赵就用一篇博客带你理明白这个算法——KMP算法。当然再介绍这个算法前&#xff0c;小赵还会介绍一个BF算法和一个函数&…

对多个 App 设计工具组件使用一个回调

当要在App 中提供多种方法来执行某个操作时&#xff0c;在组件间共享回调非常有用。例如&#xff0c;当用户点击按钮或在编辑字段中按下 Enter 键时&#xff0c;App 可以用同样的方式响应。 共享回调的示例 此示例说明如何创建一个 App&#xff0c;其中包含共享一个回调的两个…

数字孪生博物馆解决方案

数字孪生技术在博物馆领域的应用&#xff0c;可以为博物馆提供更丰富的数字化体验&#xff0c;促进文物的保护、展示和教育。以下是数字孪生博物馆解决方案的一些关键组成部分&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&…

vue echart实现横向柱状图颜色渐变、标签右对齐

需求&#xff1a;用echart实现柱状图的横向展示&#xff0c;对指定数据的柱状图进行颜色区分&#xff0c;且对应标签值展示在柱状图右侧&#xff0c;实现文字的右对齐。 主要问题点&#xff1a; 1、柱状图的颜色渐变 通过colorStops设置color渐变的起止颜色&#xff0c; color…

在Linux上安装配置Nginx高性能Web服务器

1 前言 Nginx是一个高性能的开源Web服务器&#xff0c;同时也可以作为反向代理服务器、负载均衡器、HTTP缓存以及作为一个邮件代理服务器。它以其出色的性能和灵活性而闻名&#xff0c;被广泛用于处理高流量的网站和应用程序。本文将介绍在Linux环境中安装Nginx的步骤&#xf…

josef约瑟 静态电压继电器 HWY-41B 19-240V 导轨式安装

HWY-40系列无辅源静态电压继电器 HWY-41A无辅源静态电压继电器 HWY-42A无辅源静态电压继电器 HWY-43A无辅源静态电压继电器 HWY-44A无辅源静态电压继电器 HWY-45A无辅源静态电压继电器 HWY-41B无辅源静态电压继电器 HWY-42B无辅源静态电压继电器 HWY-43B无辅源静态电压继电器 …

【项目管理】CMMI对项目管理有哪些个人启发和思考

导读&#xff1a;本人作为项目经理参与公司CMMI5级评审相关材料准备工作&#xff0c;现梳理CMMI有关知识点&#xff0c;并结合项目给出部分示例参考&#xff0c;以及本人对于在整理材料过程中一些启发和体验思考。 目录 1、CMMI定义 2、CMMI-5级 3、CMMI文档清单 4、示例-度…

多表查询、事务、索引

目录 数据准备 分类 内连接 外连接 子查询 事务 四大特性 索引 数据准备 SQL脚本&#xff1a; #建议&#xff1a;创建新的数据库 create database db04; use db04;-- 部门表 create table tb_dept (id int unsigned primary key auto_increment comment 主键…

如何制作安装“易读、易懂、易操作”的电子版说明书

在当今的数字化时代&#xff0c;电子版说明书已经不再是单纯的技术文档。对于大多数用户来说&#xff0c;电子说明书是他们接触产品或服务的第一个触点&#xff0c;它直接影响到用户对产品或服务的初步印象和后续使用体验。那么&#xff0c;如何制作安装一份“易读、易懂、易操…

基于CNN+数据增强+残差网络Resnet50的少样本高准确度猫咪种类识别—深度学习算法应用(含全部工程源码)+数据集+模型(一)

系列文章目录 基于CNN数据增强残差网络Resnet50的少样本高准确度猫咪种类识别—深度学习算法应用(含全部工程源码)数据集模型&#xff08;一&#xff09; 基于CNN数据增强残差网络Resnet50的少样本高准确度猫咪种类识别—深度学习算法应用(含全部工程源码)数据集模型&#xf…

想速成硬件工程师?请先学这50个电路

要说在电子工程师所有分类里&#xff0c;哪个岗位技术含量极高且不易被淘汰&#xff1f;那毫无疑问自然是硬件工程师&#xff0c;虽然工资略低于软件工程师&#xff0c;但技术在手&#xff0c;永远不怕没饭碗&#xff0c;所以越来越多人选择成为硬件工程师&#xff0c;那么想要…

华为交换机——配置策略路由(基于IP地址)示例

一、组网需求&#xff1a; 汇聚层Switch做三层转发设备&#xff0c;接入层设备LSW做用户网关&#xff0c;接入层LSW和汇聚层Switch之间路由可达。汇聚层Switch通过两条链路连接到两个核心路由器上&#xff0c;一条是高速链路&#xff0c;网关为10.1.20.1/24&#xff1b;另外一…

智能部署之巅:Amazon SageMaker引领机器学习革新

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 &#xff08;全球TMT2023年12月6日讯&#xff09;亚马逊云科技在2023 re:Invent全球大…

动画制作与动画控制器的使用_unity基础开发教程

动画制作与动画控制器的使用 导入素材创建动画控制器制作人物动画 前面我们讲过2D游戏中环境地图的制作&#xff0c;这里教大家使用动画控制器的使用 导入素材 先导入一下素材 选择window&#xff0c;点击Asset Store 点击Search online 搜索栏输入Sunny&#xff0c;然后回车…

qt 标准对话框的简单介绍

qt常见的标准对话框主要有,标准文件对话框QFileDialog,标准颜色对话框QColorDialog,标准字体对话框QFontDialog,标准输入对话框QInputDialog,标准消息框QMessageBox...... 1. 标准文件对话框QFileDialog,使用函数getOpenFileName()获取用户选择的文件. //qt 函数getOpenFileN…

【QT 5 调试软件+Linux下调用脚本shell-经验总结+初步调试+基础样例】

【QT 5 调试软件Linux下调用脚本shell-经验总结初步调试基础样例】 1、前言2、实验环境3、自我总结4、实验过程&#xff08;1&#xff09;准备工作-脚本1&#xff09;、准备工作-编写运行脚本文件2&#xff09;、给权限3&#xff09;、运行脚本 &#xff08;2&#xff09;进入q…

学习openAI 短长期AGI计划、使命、宪章、开创性研究、产品、工作待遇等

网站的设计&#xff1a;简洁而现代 主页 使命&#xff1a;Creating safe AGI that benefits all of humanity. &#xff08;比人类更聪明的人工智能系统&#xff09;&#xff08;自己实现或帮别人实现都认为是达成使命&#xff09;&#xff08;造福全人类&#xff1a;最大限…

windows任务计划的创建、导出和导入

创建任务计划 任务名称 任务触发器 执行bat的话起始于必须填写 创建成功 导出任务计划 选择导出路径 导出成功 导入任务计划 可视化界面导入任务计划 选择任务计划的xml文件 点击确定 导入成功 命令行导入计划任务 cd /d D:\迅雷下载schtasks.exe /create /tn 1234 /xml 123…