news 2026/4/18 5:20:06

力扣-省份数量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣-省份数量

思路分析

  1. BFS 解决该问题的核心是找连通分量的数量:
  2. 初始化:用访问数组标记每个城市是否被遍历过,初始全为未访问;省份计数器初始为 0。
    • 遍历所有城市:对于每个未被访问的城市,启动一次 BFS:
    • 省份计数器 + 1(代表发现一个新省份);
    • 将该城市加入队列,标记为已访问;
  3. 层序遍历队列中的城市,找到所有与之直接 / 间接相连的城市,标记为已访问(归入当前省份)。
    终止条件:所有城市遍历完毕,计数器即为省份数量。

代码实现

publicintfindCircleNum(int[][]isConnected){// 城市数量intn=isConnected.length;// 访问标记数组,用于记录每个城市是否被访问过boolean[]visited=newboolean[n];// 定义队列用于bfs遍历Deque<Integer>queue=newLinkedList<>();// 定义相连的城市数量intprovinceCount=0;// 遍历所有城市for(inti=0;i<n;i++){// 若该城市未被访问过if(!visited[i]){// 标记被访问过visited[i]=true;// 该城市入队列queue.offer(i);// bfs遍历所有与该城市相连的城市while(!queue.isEmpty()){// 队首元素出队列Integerpop=queue.pop();for(intj=0;j<n;j++){// 若该城市未被访问过且与当前城市相连if(!visited[j]&&isConnected[pop][j]==1){// 标记被访问过visited[j]=true;// 该城市入队列queue.offer(j);}}}// 遍历完所有与该城市相连的城市后,相连的城市数量加1provinceCount++;}}returnprovinceCount;}

复杂度分析

  • 总体时间复杂度:O(n²)
    • 外层循环n次
    • 每次BFS内部的内层循环总共执行n次(检查所有城市)
    • 虽然有嵌套结构,但每个节点只被访问一次,总时间复杂度为O(n²)
  • 空间复杂度:O(n)
    • visited数组:O(n) - 存储每个城市是否被访问
    • queue队列:最坏情况下O(n) - 在极端情况下,所有城市可能同时在队列中
    • 其他变量:O(1)

注意:provinceCount要在这个省份的所有城市都遍历结束后再去+1,而不要写到visited[j]后面。
一定要理解好题目,题目是要求省份的数量,当多个城市相连时,这些城市只能算是一个省,如果直接在遍历时,即在visited[j]后面就将provinceCount+1的话,就会导致每个城市相连就像省份数量+1,从而导致省份数量严重被高估。
举例说明:
假设有3个城市,连接关系如下:

isConnected = [ [1,1,0], [1,1,0], [0,0,1] ]
  • 城市0和城市1相连(同一省份)
  • 城市2独立(另一个省份)
  • 正确答案应该是2个省份

如果把provinceCount++放在visited[j] = true之后:

  • 当i=0时,会访问城市0和1,provinceCount会增加多次
  • 当i=2时,会访问城市2,provinceCount再增加
  • 结果就不正确了
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:34:00

使用淘宝闪购外卖红包下单有什么限制吗?

闪购外卖红包虽能帮您省钱&#xff0c;但使用时也需注意一些限制&#xff0c;以免下单时产生困扰。首先&#xff0c;红包通常有明确的有效期&#xff0c;多数为领取当日有效&#xff0c;部分活动券可能长达3-7天&#xff0c;过期将自动失效&#xff0c;建议领取后尽快使用。 其…

作者头像 李华
网站建设 2026/4/18 5:37:24

毕业论文不用愁!四大 AI 工具实测 选题到答辩一站式通关

毕业论文的通关之路&#xff0c;从来都是步步难行&#xff1a;选题时抓耳挠腮想不出创新点&#xff0c;文献搜集熬大夜还找不准核心&#xff0c;写作时逻辑混乱卡壳到深夜&#xff0c;降重改格式反复磨还不达标&#xff0c;最后答辩准备慌手慌脚&#xff0c;连核心要点都捋不清…

作者头像 李华
网站建设 2026/4/18 5:38:08

STM32-TIM-输出比较

一、OC&#xff08;Output Compare&#xff09;输出比较 定时器的通道可以配置为输出比较模式。 在PWM输出模式下&#xff0c;除了CNT&#xff08;计数器当前值&#xff09;、ARR&#xff08;自动重装载值&#xff09;之外&#xff0c;还多了一个值CCRx&#xff08;捕获/比较寄…

作者头像 李华
网站建设 2026/4/17 8:59:45

zephyr mbox 学习

一、引言在 Zephyr RTOS 面向多核 MCU、异构 SoC 以及安全域隔离&#xff08;如 Secure / Non-secure&#xff09;的应用场景中&#xff0c;核间通信&#xff08;IPC&#xff09; 是一个绕不开的基础能力。为了在不同硬件平台之间提供统一的软件抽象&#xff0c;Zephyr 提供了 …

作者头像 李华
网站建设 2026/4/17 23:36:54

电力系统线路纵联差动保护的 Simulink 仿真及相关影响因素探究

电力系统相关&#xff1a;线路纵联差动保护simulink仿真&#xff0c;以及差动保护受因素的影响。 差动保护gui&#xff0c;手动输入参数在电力系统中&#xff0c;线路纵联差动保护是保障电力线路安全稳定运行的关键保护机制之一。今天咱们就来深入探讨一下它的 Simulink 仿真实…

作者头像 李华
网站建设 2026/4/17 22:06:38

2030年的AI:量子意识与人机共生

版权声明:本文为DREAMVFIA UNION原创作品,2026年版权所有。未经授权,禁止转载、摘编或以任何形式传播本文内容。 摘要 当人类文明站在第四次工业革命的十字路口,人工智能与量子力学的交汇正在重新定义"意识"与"存在"的边界。本文从技术演进、哲学思辨…

作者头像 李华