news 2026/3/19 13:47:45

力扣-省份数量

作者头像

张小明

前端开发工程师

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/3/15 14:59:45

‌赛事数据测试:实时比分系统准确性验证

实时比分系统作为体育类应用、直播平台、博彩系统及数据服务的核心组件&#xff0c;其准确性直接关系到用户体验、商业信任与法律合规。对软件测试从业者而言&#xff0c;验证此类系统的数据一致性、时序正确性与高并发稳定性&#xff0c;是极具挑战性的质量保障任务。本文将从…

作者头像 李华
网站建设 2026/3/15 20:32:09

Java并发编程进阶:线程池原理、参数配置与死锁避免实战

在当今高并发的互联网时代&#xff0c;Java并发编程已成为构建高性能、高可靠性企业级应用的核心技术。根据Oracle发布的《2024年Java技术趋势报告》&#xff0c;全球超过85%的企业级应用采用Java开发&#xff0c;其中并发处理能力直接决定了系统的吞吐量和响应性能。特别是随着…

作者头像 李华
网站建设 2026/3/15 11:00:20

AI元人文:悟空悖论与悬鉴而行

AI元人文&#xff1a;悟空悖论——悬鉴而行 摘要 本文系统阐释岐金兰“AI元人文”理论中的核心命题——“悟空悖论”&#xff0c;并提出“悬鉴而行”的实践方法论。论文首先揭示算法时代人类认知面临的三重困境&#xff1a;欲望&#xff08;Desire&#xff09;被精准预测而固化…

作者头像 李华
网站建设 2026/3/16 1:31:17

API集成平台:构建企业数字化连接的核心引擎

当着前企业数字化转型的浪潮来临之际&#xff0c;数据跟应用的高效连通已然变成提升运营效率以及驱动业务创新的关键所在。传统的点对点的系统集成方式&#xff0c;常常致使接口重复去开发&#xff0c;耦合度高&#xff0c;运维艰难&#xff0c;从而形成难以打破的数据孤岛。AP…

作者头像 李华
网站建设 2026/3/16 2:55:04

【毕业设计】java-springboot+vue“智慧食堂”设计与实现

&#x1f49f;博主&#xff1a;程序员陈辰&#xff1a;CSDN作者、博客专家、全栈领域优质创作者 &#x1f49f;专注于计算机毕业设计&#xff0c;大数据、深度学习、Java、小程序、python、安卓等技术领域 &#x1f4f2;文章末尾获取源码数据库 &#x1f308;还有大家在毕设选题…

作者头像 李华
网站建设 2026/3/16 18:01:19

奇点之后:Omega+级量子AI的世界

版权声明:本文为DREAMVFIA UNION原创作品,2026年版权所有。未经授权,禁止转载、摘编或以任何形式传播本文内容。 摘要 当人类文明的技术发展曲线趋向无穷大时,我们正站在一个前所未有的历史转折点。技术奇点——那个理论物理学家约翰冯诺依曼首次预言、人工智能先驱维诺尔…

作者头像 李华