Leetcode815.公交线路 Bus Routes(Java)
Leetcode815.公交线路 Bus Routes(Java)
该题应该为图论题,边有权值的情况下寻找最短路径,采用多源BFS解决
示例 1:
输入:
routes = [[1,2,7],[3,6,7]]
,source = 1
,target = 6
输出:2
解释:最优策略是先乘坐第一辆公交车到达车站 7 , 然后换乘第二辆公交车到车站 6 。
- 使用
HashMap<Integer, LinkedList<Integer>> map
保存每个站点经过的线路,例如示例1中(key = 7, value = [0,1])
的键值对代表的是7号公交站点存在与公交线路0、1中 LinkedList<Integer> queue
队列为BFS中遍历的辅助队列,存放每一层需要遍历的站点- 已示例1为例,BFS遍历第一层流程如下,初始化队列
queue
只有source = 1
一个元素- 遍历队列中元素查询
HashMap
中包含站点1
的所有线路,得线路0
- 遍历线路
0
的所有站点j = 2,7
- 若
j == target
,找到目标站点,返回结果 - 对于所有非目标站点
j
,都为下一层需要遍历的节点,都需要进队列等待遍历
- 若
- 遍历完第一层所有
j
后,代表的实际含义是从站点1
出发,乘坐一辆公共汽车能够到达的所有站点j
- 因此遍历完一层后,公交车计数器
cnt++
- 遍历队列中元素查询
- 同样的遍历方法,遍历至结果出现或遍历结束为止
- 因为图有环路,因此可能会发生遍历死循环,
- 采用自动去重的
HashSet<Integer> set
来记录已经遍历过的线路 - 如果使用
HashSet<Integer> set
记录已经遍历过的站点,最用一个用例会因为超时而不通过
- 采用自动去重的
时间复杂度: O ( M × N ) O(M\times N) O(M×N)
class Solution {public int numBusesToDestination(int[][] routes, int source, int target) {if (source == target) return 0; // 目标站点等于起始结点,不用乘车HashMap<Integer, LinkedList<Integer>> map = new HashMap<>(); //保存每个站点经过的路线for (int i = 0; i < routes.length; i ++) { //初始化for (int j = 0; j < routes[i].length; j ++) {if (!map.containsKey(routes[i][j])) {map.put(routes[i][j], new LinkedList<Integer>());}LinkedList<Integer> temp = map.get(routes[i][j]);temp.add(i);} }HashSet<Integer> set = new HashSet<>(); // 记录已经遍历过的线路LinkedList<Integer> queue = new LinkedList<Integer>(); // BFS辅助队列queue.add(source);int res = -1, cnt = 1; // cnt为公交车计数器while (!queue.isEmpty()) {int len = queue.size(); // 获取该层元素的数量for (int k = 0; k < len; k ++) { // 遍历一层int ele = queue.pollFirst();LinkedList<Integer> lines = map.get(ele); // 获取站点对应的线路for (int i : lines) {if (set.contains(i)) continue; // 线路已经完成遍历set.add(i); // set中更新线路for (int j : routes[i]) { // 将下一层站点放入队列中queue.offerLast(j);if (j == target) { // 找到结果返回return cnt; }}}}cnt ++; // 完成一层遍历后,公交车计数器加一}return res; // 返回-1,起始站点与目标站点不能连通}
}
Leetcode815.公交线路 Bus Routes(Java)相关推荐
- JAVA JSP城市公交查询系统 jsp公交线路查询系统Java公交查询系统Java公交线路查询
JSP城市公交查询系统 jsp公交线路查询系统Java公交查询系统Java公交线路查询
- [Leetcode] Bus Routes 公交线路
Bus Routes 详细解题思路请访问:https://yanjia.me/zh/2018/11/... We have a list of bus routes. Each routes[i] i ...
- 微信公众号开发(公交线路查询-JAVA
一.Dom4j的使用 在介绍公交线路开发之前,先简单介绍下Dom4j的使用,因为公交线路查询引用的是爱帮公交api,调用结果为xml格式文件,故用到了Dom4j这个包,当然还有其他的包来读取xm ...
- 线性代数三之状压DP的矩阵加速——Quad Tiling,Bus公交线路
状压与矩阵加速的藕断丝连 Quad Tiling description solution code [Hnoi2010]Bus 公交线路 description solution code Quad ...
- 【BZOJ2004】[Hnoi2010]Bus 公交线路 状压+矩阵乘法
[BZOJ2004][Hnoi2010]Bus 公交线路 Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距离均为1 ...
- java实现找一条转乘次数最少的公交线路?,基于最优换乘次数的城市公交查询算法...
摘要:城市公交查询系统是一个城市非常重要的基础设施,也是城市文明的一个重要标志.该文探讨城市公交查询系统中最优换乘次数的查询算法.算法以图论中邻接矩阵为基础,结合矩阵算术运算的特点和公交查询系统的要求 ...
- JAVA毕业设计公交线路查询系统计算机源码+lw文档+系统+调试部署+数据库
JAVA毕业设计公交线路查询系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计公交线路查询系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开发语 ...
- java 公交管理系统 代码_java公交线路管理系统
展开全部 //写了两个小时啊,兄弟,要采纳我啊 //Site(站点类) package transit; import java.util.ArrayList; import java.util.Li ...
- JAVA爬虫-上海公交线路爬取
最开始的数据获取也有两个思路 虽然我的数据不是这么来的 一 .http://www.zuobus.com/line-overview.php?c=2 这个网站有所有的上海的公交线路 二.百度poi ...
最新文章
- 基于纯 CSS3 技术实现美观的标签云效果
- 卷积为什么如此强大?一文全解深度学习中的卷积
- 最新BAT大厂面试者整理的Android面试题目模板,分享PDF高清版
- 日期格式转换,正则匹配后转换;指定时间增加天数加转格式;js时间转换格式
- php 并发出站,PHP控制站点并发
- 配置sharepoint站点为Form认证(下)
- VS2015 Visual Assist X 破解版安装教程
- 新手自己搭建服务器步骤
- 华为模拟器eNSP练习题 - VLAN综合实验
- 天文竞赛怎么用计算机,师范生教学技能大赛!计算机设计大赛!主持礼仪风采大赛!天文台活动预告!民宿企划竞赛!舞蹈大赛!...
- 自动化测试框架[Cypress元素操作详解]
- 大规模时间序列数据自动异常检测架构
- php word 添加,PHP 实现Office word 关键词添加背景色
- 关于透明桌面相框图片不能显示的问题
- matlab中(),[],与{}的使用区别
- USB是如何诞生的?
- 一屏变双屏,有了ProPresenter 6你也可以做到!
- endnote 进行 convert to plain text操作后word格式大变问题解决办法
- SIGIR‘21因果推断——不要把流行度偏差一棍子打死Causal Intervention for Leveraging Popularity Bias in Recommendation
- think-cell高阶教程(1)——单一窗口管理所有数据链接的自动更新
热门文章
- LTE学习笔记--LTE无线连接过程--切换
- 计算机相关的迎新标语,创意新颖的迎新标语
- 2019天猫双11销售额预测:2583.387亿
- linux3.4.2内核移植详解(六):基于UVC的USB摄像头内核配置
- 粒子机器人,能否敲开机器意识觉醒之门?
- PPT文件打开密码怎么找回
- java计算机毕业设计科学评价系统源程序+mysql+系统+lw文档+远程调试
- vue中的.sync修饰符
- sync.Mutex 与 sync.WaitGroup 使用示例
- Kafak快速入门攻略