news 2026/4/16 23:40:26

力扣-重新规划路线

作者头像

张小明

前端开发工程师

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/4/15 16:23:02

两个美国:精英的知识崇拜与底层的反智驯化

笔者在读历史学家理查德霍夫施塔特&#xff08;Richard Hofstadter&#xff09;在1963年出版的经典著作《美国生活中的反智主义》&#xff08;Anti-Intellectualism in American Life&#xff09;。这是读书笔记的第二篇 在美国&#xff0c;知识从未真正被抛弃——它只是被重新…

作者头像 李华
网站建设 2026/4/16 14:13:36

Vue生命周期和工程化开发

vue生命周期&#xff1a;一个Vue实例从创建到销毁的整个过程生命周期的四个阶段&#xff1a;1创建&#xff0c;2挂载&#xff0c;3更新&#xff0c;4 销毁创建阶段&#xff1a;new Vue 创建响应式数据挂载阶段&#xff1a;渲染模版更新阶段:修改数据&#xff0c;更新视图创建和…

作者头像 李华
网站建设 2026/4/16 15:53:32

人工设计问卷vs虎贲等考AI:3天vs30分钟,学术级问卷原来可以这么做

“查了20份文献&#xff0c;量表还是设计不规范”“逻辑漏洞被导师批‘无效问卷源头’”“回收300份问卷&#xff0c;却因题项歧义导致数据作废”——做学术调研时&#xff0c;问卷设计往往成为“隐形拦路虎”。传统人工设计问卷&#xff0c;不仅要精通量表设计原理、掌握逻辑校…

作者头像 李华
网站建设 2026/4/16 7:21:45

【毕设】java-springboot+vue“漫画之家”系统毕业设计

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

作者头像 李华
网站建设 2026/4/16 8:18:39

工具使用系列之 Python基于MatPlotlib数据可视化

目录 1. Matplotlib介绍 2.绘图示例 2.1 快速绘图示例 2.2 使用默认绘图对象 2.3 绘制多幅图 3. Plot点线图 3.1 绘制函数曲线 3.2绘制参数方程 3.3点线图完整示例 4. Subplot子图 4.1子图示例 4.2 子图-单类型 4.3 子图-多类型 5. Hist直方图 5.1直方图示例 6.…

作者头像 李华