leetcode-815-公交路线
这是我参与更文挑战的第6天,活动详情查看: 更文挑战
[博客链接]
[题目描述]
1 | css复制代码给你一个数组 routes ,表示一系列公交线路,其中每个 routes[i] 表示一条公交线路,第 i 辆公交车将会在上面循环行驶。 |
[题目链接]
[github地址]
[思路介绍]
思路一:BFS
- 分析题意可以很快的想到DFS或者BFS解决,因为本题只需要考虑选择的公交车线路数量,不需要考虑站点路线,所以用广度优先即可,最先遍历到的一定是最短的
- 考虑题解的时候有如下问题:
- 因为最开始不在公交车上且在1站台,需要考虑是否routes[0]包含1站台,当然这只是一个前提条件并不影响后续的解题过程,不失一般性的我们假设第一条线路一定包含起始站台
- 首先确认链路关系,将所有线路和线路中的包含的站台存入map,key为线路索引,value为站台组成的set
- 然后依次遍历所有map,当有线路包含source站台的时候存入deque作为BFS遍历的跟节点
- 定义另一个map存入转移到当前线路的step,key为当前线路索引,value为step
- 接下来就是常规的BFS解析了
- 需要注意的是本题有两个边界情况
- 起始和终点在一条线路上,直接返回0,虽然我觉得这个边界和题目描述的初始不在公交车上有冲突
- 所有线路没有起点站台
1 | java复制代码public int numBusesToDestination(int[][] routes, int source, int target) { |
时间复杂度O(∑0nroutes+n2\sum_{0}^{n}routes+n^2∑0nroutes+n2)
n为线路数,求和公式为每条线路上站台的数量和
本文转载自: 掘金