微软和谷歌的几个大佬组织了一个面试刷题群,可以加管理员VX:sxxzs3998(备注优快云),进群参与讨论和直播
1. 题目
给你一个数组 routes ,表示一系列公交线路,其中每个 routes[i] 表示一条公交线路,第 i 辆公交车将会在上面循环行驶。
例如,路线 routes[0] = [1, 5, 7] 表示第 0 辆公交车会一直按序列 1 -> 5 -> 7 -> 1 -> 5 -> 7 -> 1 -> … 这样的车站路线行驶。 现在从 source 车站出发(初始时不在公交车上),要前往 target 车站。 期间仅可乘坐公交车。
求出 最少乘坐的公交车数量 。如果不可能到达终点车站,返回 -1 。
示例 1:
输入:routes = [[1,2,7],[3,6,7]], source = 1, target = 6
输出:2
解释:最优策略是先乘坐第一辆公交车到达车站 7 , 然后换乘第二辆公交车到车站 6 。
示例 2:
输入:routes = [[7,12],[4,5,15],[6],[15,19],[9,12,13]], source = 15, target = 12
输出:-1
2. 解析
下图是示例的图的构建形式,采用邻接表来表示图的邻居节点,不同的颜色表示不同的公交汽车。

本题首先不要管车站(station),我们只在乎公交路线(route)。我们可以将每一条线路视作一个点,对于任意两条线路,如果它们经过的车站有交集,那么就在两点之间连一条边,这样就构成了一张图。这是否会让人联想到DFS或者BFS呢?
图中有些点(路线)是包含起点 SSS 的,我们把它们都作为起点。而有些点(路线)是包含终点 TTT 的,我们把它们都作为终点。
那么问题就转化为了求起点到终点的最短路径。因为起点和终点数量可能有多个,所以我们新建两个结点,一个起点用来指向所有包含 SSS 的点,一个终点用

该博客解析了一道微软面试中的算法题目,涉及公交路线问题。通过构建图并使用BFS寻找从source到target的最少乘坐公交车数量。博主提供了解题思路和复杂度分析,并提及有面试刷题群供加入讨论。
最低0.47元/天 解锁文章
1815

被折叠的 条评论
为什么被折叠?



