赞
踩
有 n
个城市,其中一些彼此相连,另一些没有相连。如果城市 a
与城市 b
直接相连,且城市 b
与城市 c
直接相连,那么城市 a
与城市 c
间接相连。
省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。
给你一个 n x n
的矩阵 isConnected
,其中 isConnected[i][j] = 1
表示第 i
个城市和第 j
个城市直接相连,而 isConnected[i][j] = 0
表示二者不直接相连。
返回矩阵中 省份 的数量。
示例 1:
输入: edges = [[1,2], [1,3], [2,3]] 输出: [2,3]
示例 2:
输入: edges = [[1,2], [2,3], [3,4], [1,4], [1,5]] 输出: [1,4]
提示:
n == edges.length
3 <= n <= 1000
edges[i].length == 2
1 <= ai < bi <= edges.length
ai != bi
edges
中无重复元素典型的并查集算法,无脑套用即可。
- class Solution {
- public static int MAXN=1001;
- public static int[] father=new int[MAXN];
- public int findCircleNum(int[][] isConnected) {
- build(isConnected.length);
- for(int i=0;i<isConnected.length;i++){
- for(int j=0;j<=i;j++){
- if(isConnected[i][j]==1){
- union(i,j);
- }
- }
- }
- int count=0;
- int pre=-1;
- Set<Integer> set=new HashSet<>();
- for(int i=0;i<isConnected.length;i++){
- set.add(find(i));
- }
- return set.size();
- }
- public static void build(int n){
- for(int i=0;i<=n;i++){
- father[i]=i;
- }
- }
- public static int find(int i){
- if(i!=father[i]){
- father[i]=find(father[i]);
- }
- return father[i];
- }
- public static void union(int x,int y){
- father[find(x)]=find(y);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。