news 2026/9/3 2:09:29

力扣-省份数量

作者头像

张小明

前端开发工程师

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/9/2 17:57:46

用户行为热点:登录峰值测试与优化

‌用户行为热点与登录峰值挑战在数字化时代&#xff0c;用户行为热点如促销活动、节假日或突发事件常引发登录峰值——即系统在短时间内承受高并发用户登录请求。对软件测试从业者而言&#xff0c;这不仅关乎系统稳定性&#xff0c;还直接影响用户体验和业务连续性。据统计&…

作者头像 李华
网站建设 2026/9/2 10:10:25

GNSS与单北斗变形监测技术的应用现状分析与未来发展方向

本文旨在分析GNSS变形监测一体机与单北斗变形监测系统的当前应用现状及未来的发展趋势。从技术特点到市场需求&#xff0c;单北斗变形监测已在基础设施管理中扮演重要角色。重点探讨了单北斗的原理&#xff0c;包括它在桥梁、大坝和地质灾害监测中的应用&#xff0c;及其提供的…

作者头像 李华
网站建设 2026/9/2 18:07:57

【swiftUI】实现智能可收缩日历(单行/全月切换)

一、 核心特性 智能显示模式&#xff1a;收起状态--仅显示当前日期所在的整周&#xff08;7天&#xff09;&#xff1b;展开状态--显示完整月份的日历网格&#xff1b;平滑的动画过渡效果 数据一致性&#xff1a;始终显示当前月份的数据&#xff1b;收起时自动定位到当前周&am…

作者头像 李华
网站建设 2026/9/2 23:11:29

MemOS开源框架实战:构建基于Graph的记忆图谱,让AI具备长期记忆能力

MemOS是一款基于Graph的记忆开源项目&#xff0c;通过TreeTextMemory实现结构化记忆存储与关联。本文详细介绍了如何在LangChain1.x框架中集成MemOS的记忆图谱能力&#xff0c;包括构建带记忆的ChatBot、体验记忆的自动重组功能&#xff0c;以及通过Middleware机制实现无侵入式…

作者头像 李华
网站建设 2026/9/3 1:13:42

windows QT项目

一、1、2、在纯linux环境下用QTCreator这个IDE去编项目&#xff1b;但是如果在windows上编写qt项目&#xff0c;VS这个IDE还是比QTCreator要强大很多&#xff0c;而且VS编写的QT项目&#xff0c;仍然可以移植到Linux等平台上&#xff0c;不影响跨平台特性&#xff01;&#xff…

作者头像 李华
网站建设 2026/8/26 10:25:34

‌新闻事件分析:社交媒体数据验证测试案例

为什么社交媒体数据正在重塑测试边界‌在2026年&#xff0c;软件测试的战场已不再局限于API响应码、数据库事务一致性或UI布局像素偏差。‌社交媒体数据‌&#xff0c;作为全球最庞大、最动态、最不可控的非结构化输入源&#xff0c;正成为系统鲁棒性验证的“终极压力测试场”。…

作者头像 李华