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

怎么用dw做地图网站网络推广网站建设

怎么用dw做地图网站,网络推广网站建设,信息门户网站开发合同,公司注册地址与实际经营地址不符一、并查集概念 并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。 并查集的思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,我们只要找到了某个元素的的树根,…

一、并查集概念

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。

并查集的思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,我们只要找到了某个元素的的树根,就能确定它在哪个集合里。

【摘自菜鸟教程】

只看上面这段例子可能会发懵,让我们来看一个详细的例子。

大家看剧都知道,古时候基本上都会拉帮结派,形成大大小小许多帮派。这些帮派都会有等级划分,大当家,二当家,等等。类似于这样的结构。

假如三当家的小弟想知道他真正的老大是谁,那么他就去问三当家,三当家就告诉他他的老大是二当家,然后这个小弟就去问二当家,二当家就会告诉他,他的老大是大当家,那么小弟再去问大当家,大当家就会告诉他,我才是你真正的老大。那么所有这些人,他们的老大都只有一个,那就是“大当家”。

翻译成大白话说就是:如果一个元素的老大不是他自己,那么他自己的老大的老大就是他的老大。

这就是小弟找老大的过程,也就是“并查集”中“查”的部分。

假如突然有一天,大当家干掉了自己的死对头(另一个帮派的老大)并成功吞并了他的帮派。

那么现在,另一个帮派的小弟再找大哥时,就会发现,此时自己的大哥已经变成了另一个帮派的大哥。这就是“并查集”中“并”的部分。

二、并查集在算法题中应用

接下来我们根据一道算法题来看一下如何使用并查集。

Leetcode 547. 省份数量

题目描述

有 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

提示:

  • 1 <= n <= 200
  • n == isConnected.length
  • n == isConnected[i].length
  • isConnected[i][j] 为 1 或 0
  • isConnected[i][i] == 1
  • isConnected[i][j] == isConnected[j][i]

简单分析题目后发现,这就是一个找大哥的过程。每一个省份算作一个帮派,有几个“大哥”就是有几个省份,所以该题可以使用并查集

直接上代码:

class Solution {public int findCircleNum(int[][] isConnected) {// 定义一个新数组用来记录每个城市的大哥int[] city = new int [isConnected.length];// 初始化数组,刚开始每个人的大哥都是自己for (int i = 0; i < city.length; i++) {city[i] = i;}// 遍历城市数组for (int i = 0; i < isConnected.length; i++) {for (int j = 0; j < isConnected[0].length; j++) {// 如果时同一个城市或者两个城市不相连,那么直接继续if (i == j || isConnected[i][j] == 0) {continue;}// “并”的过程,i城市的大哥就是j城市的大哥city[find(i, city)] = find(j, city);}}// 遍历 city 数组,看看有几个大哥int res = 0;for (int i = 0; i < city.length; i++) {if (i == city[i]) {res++;}}return res;}/*** “查”的过程,查找x城市的大哥** @param x 要找大哥的城市* @param city 定义每个城市的大哥的数组* @return x城市的大哥*/public int find(int x, int[] city) {// 如果 x 的大哥不是 x,那么就去找 x 大哥的大哥while (city[x] != x) {x = city[x];}return x;}
}

http://www.khdw.cn/news/64980.html

相关文章:

  • 百度收录哪些网站吗成都业务网络推广平台
  • 做网站建设平台2023年7月最新疫情
  • 南昌做网站比较好的公司网站运营推广
  • 南通网站建设机构跟我学seo
  • 仿v电影 wordpress百度关键词优化公司
  • 网站百度推广和优化可以发外链的平台
  • 合肥网站建设推广服务seo技术培训广东
  • wordpress上传限制8mb性价比高seo的排名优化
  • 公司网站续费一年多少钱代理推广
  • 学网站建设哪里好今日最新消息新闻报道
  • 做网站的维护成本百度怎么转人工客服
  • 沈阳微营销网站制作厦门人才网唯一官网
  • iis 网站没有上传权限百度网址大全下载到桌面
  • 中山网站优化公司要做seo
  • 选择佛山顺德网站设计站长工具seo词语排名
  • 西安到北京飞机几个小时seo排名快速优化
  • 如何建立互联网公司网站江苏网页定制
  • 手机网站建设推广方案数据分析网官网
  • 企业网站建设费用摊销免费网站在线客服系统源码
  • 太原做网站价格百度联盟是什么
  • 厦门网站建设国家培训网官网
  • asp 网站管理工具搜狗收录提交
  • 网站做流量怎么赚钱的热搜关键词
  • 免费b站网页推广青柠影院免费观看电视剧高清
  • 传奇网站劫持怎么做网络媒体广告代理
  • 那些网站可以做反链深圳网站优化网站
  • 给别人做网站去掉版权网站关键词排名优化
  • 许昌做网站公司汉狮价格武汉java培训机构排名榜
  • 怎么给公司做微网站廊坊seo外包
  • 做网站公司南京有人看片吗免费的