码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 剑指Offer || 116.省份数量


    题目

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

    注意:本题与主站 547 题相同: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

    LCR 116. 省份数量 - 力扣(LeetCode)

    题解

    思路一:dfs,挨个结点进行深搜,每有一个新的城市没有被visited,province++。

    代码:

    1. class Solution {
    2. public int findCircleNum(int[][] isConnected) {
    3. boolean[] visited=new boolean[isConnected.length];
    4. int province=0;
    5. for(int i=0;i
    6. if(!visited[i]) {
    7. dfs(isConnected,visited,i);
    8. province++;
    9. }
    10. }
    11. return province;
    12. }
    13. public void dfs(int[][] isConnected,boolean[] visited,int i){
    14. for(int j=0;j
    15. if(isConnected[i][j]==1&&!visited[j]) {
    16. visited[j]=true;
    17. dfs(isConnected,visited,j);
    18. }
    19. }
    20. }
    21. }

    思路二:并查集,find找当前结点的根节点,union来合并两个不同根的结点。注意合并时一定要合并当前结点的根节点而不是当前结点。

    代码:

    1. class Solution {
    2. public int findCircleNum(int[][] isConnected) {
    3. int n=isConnected.length;
    4. int[] parent=new int[n];
    5. for(int i=0;i
    6. parent[i]=-1;
    7. for (int i = 0; i
    8. for (int j = i + 1; j
    9. if (isConnected[i][j] == 1)
    10. union(parent, i, j);
    11. }
    12. }
    13. int province=0;
    14. for(int i=0;i
    15. if(parent[i]==-1) province++;
    16. return province;
    17. }
    18. public int find(int[] parent,int x) {
    19. while(parent[x]>=0) x=parent[x];
    20. return x;
    21. }
    22. public void union(int[] parent,int x1,int x2) {
    23. int root1=find(parent,x1);
    24. int root2=find(parent,x2);
    25. if(root1==root2) return;
    26. parent[root2]=root1;
    27. }
    28. }

  • 相关阅读:
    sscanf(“hello, world“, “%*s%s“, buf) -- “%*s%s“
    【大话设计模式】依赖倒转原则
    洛谷千题详解 | P1004 [NOIP2000 提高组] 方格取数【C++、Java、Pascal语言】
    nginx解决vue跨域图片问题
    Java进化史:从Java 8到Java 17的语言特性全解析
    Linux bash特性及bash脚本编程初步
    什么是跨域?及跨域解决方法
    【完美世界】两男神一美女登场,石昊杀真神夺金果,战帝老天人出世,云曦参战
    老年患者植入LVAD的挑战:胃肠道出血
    [工具推荐]截图工具 -- snipaste
  • 原文地址:https://blog.csdn.net/Mar_mxs/article/details/134469320
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号