news 2026/2/25 14:09:18

力扣-重新规划路线

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣-重新规划路线

思路分析

  1. 预处理:构建带 “反转标记” 的邻接表(最核心的优化点)
    传统思路是用 “无向邻接表 + 哈希集合存原始边”,而这段代码直接在邻接表中存储边的方向和反转代价:
    对于原始有向边 a->b:
    向 a 的邻接列表中添加 {b, 1}:表示从 a 到 b 是原始方向,若遍历路径是 a→b(背离 0),则需要反转这条边,标记代价 1;
    向 b 的邻接列表中添加 {a, 0}:表示从 b 到 a 是反向方向,若遍历路径是 b→a(指向 0),则无需反转,标记代价 0。
    这种设计的本质:把 “判断原始边方向” 和 “统计反转数” 合并到邻接表中,无需额外存储和查询原始边,空间和时间效率更高。
  2. BFS 初始化
    队列:存储待遍历的城市,初始放入起点城市 0(BFS 的层序遍历起点);
    访问数组:标记已遍历的城市,避免重复处理(比如 0→1 后,不再处理 1→0);
    结果计数器 res:初始为 0,累计需要反转的边数。
  3. BFS 核心遍历逻辑
    取出队列头部的当前城市 curr;
    遍历 curr 的所有邻接节点(每个邻接节点是 {next, flag} 数组):
    若 next 未被访问:
    ✅ 累加 flag 到 res(flag=1 则反转,flag=0 则不反转);
    ✅ 标记 next 为已访问;
    ✅ 将 next 加入队列,继续下一层遍历;
    若 next 已被访问:跳过(避免回头遍历)。
    队列为空时,res 就是需要反转的最小边数。

代码实现

publicintminReorder(intn,int[][]connections){// 1. 构建邻接表:adj[x] = {{y, flag}, ...}List<List<int[]>>adj=newArrayList<>();for(inti=0;i<n;i++){adj.add(newArrayList<>());}for(int[]conn:connections){inta=conn[0],b=conn[1];adj.get(a).add(newint[]{b,1});// a→b 是原始边,需反转则+1,标记flag=1adj.get(b).add(newint[]{a,0});// b→a 是反向边,无需反转,标记flag=0}// 2. BFS初始化:队列+访问数组,从0出发Queue<Integer>queue=newLinkedList<>();boolean[]visited=newboolean[n];queue.offer(0);visited[0]=true;intres=0;// 记录需要反转的边数// 3. BFS遍历while(!queue.isEmpty()){intcurr=queue.poll();// 遍历当前节点的所有邻接节点for(int[]neighbor:adj.get(curr)){intnext=neighbor[0];intflag=neighbor[1];if(!visited[next]){// 未访问过的节点才处理res+=flag;// flag=1则反转,计数+1;flag=0无操作visited[next]=true;queue.offer(next);}}}returnres;}

复杂度分析

  • 时间 O (n)(每个节点 / 边仅遍历一次),
  • 空间 O (n)(邻接表 + 队列 + 访问数组),
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/14 23:04:20

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

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

作者头像 李华
网站建设 2026/2/20 19:17:47

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

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

作者头像 李华
网站建设 2026/2/16 12:41:18

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

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

作者头像 李华
网站建设 2026/2/18 7:58:17

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

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

作者头像 李华
网站建设 2026/2/16 9:02:49

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

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

作者头像 李华
网站建设 2026/2/16 6:27:28

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

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

作者头像 李华