LeetCode - 547 省份数量

题目来源

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

题目描述

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

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

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

返回矩阵中 省份 的数量。

示例

输入 isConnected = [[1,1,0],[1,1,0],[0,0,1]]
输出 2

LeetCode - 547 省份数量_第1张图片

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

 LeetCode - 547 省份数量_第2张图片

  

提示

  • 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]

题目解析

此题和华为机试 - 发广播_伏城之外的博客-CSDN博客

相同,题解轻看上面连接对应的题目

算法源码

/**
 * @param {number[][]} isConnected
 * @return {number}
 */
var findCircleNum = function (isConnected) {
  const n = isConnected.length;

  const ufs = new UnionFindSet(n)

  for (let i = 0; i < n; i++) {
    for (let j = i + 1; j < n; j++) {
      if (isConnected[i][j] === 1) {
        ufs.union(i, j);
      }
    }
  }

  return ufs.count;
};

class UnionFindSet {
  constructor(n) {
    this.fa = [];
    this.init(n)
    this.count = n;
  }

  init(n) {
      for(let i=0; i

LeetCode - 547 省份数量_第3张图片

你可能感兴趣的:(LeetCode,leetcode,算法,JavaScript)