您的位置:首页 > 科技 > IT业 > 装修平台网站制作_河北邢台宁晋县疫情最新情况_百度在全国有哪些代理商_网站流量分析

装修平台网站制作_河北邢台宁晋县疫情最新情况_百度在全国有哪些代理商_网站流量分析

2024/9/22 13:26:49 来源:https://blog.csdn.net/ganjiee0007/article/details/142408317  浏览:    关键词:装修平台网站制作_河北邢台宁晋县疫情最新情况_百度在全国有哪些代理商_网站流量分析
装修平台网站制作_河北邢台宁晋县疫情最新情况_百度在全国有哪些代理商_网站流量分析

815. 公交路线 - 力扣(LeetCode)

题干

给你一个数组 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

解法

首先,你需要一个车站对应公交车列表的hashmap
然后,你得到出发点车站。将对应的公交车列表都取出来,对应公交车列表对应的所有站台都拿出来。然后阶段距离。 一次类推。
也就是原来是点和点之间的连接,这里多了一层中介,就是公交车站台。

public static int numBusesToDestination(int[][] routes, int source, int target) {if (source == target) { // 目的地和出发点重合,且公交车不经过改地点return 0;}// routes  公交车对应的是目车站列表// 数值和车站HashMap<Integer, List<Integer>> map = new HashMap<>(); // 车站对应的公交车列表for (int i = 0; i < routes.length; i++) {int[] route = routes[i];for (int key : route) {List<Integer> list = map.getOrDefault(key, new ArrayList<>());list.add(i);map.put(key, list);}}if (map.get(source) == null || map.get(target) == null) {return -1;}HashSet<Integer> set = new HashSet<>(); // 这里记录HashMap<Integer, Integer> dict = new HashMap<>();// ArrayDequeArrayDeque<Integer> deque = new ArrayDeque<>();dict.put(source, 0);deque.add(source); // 车站出发点while (!deque.isEmpty()) {Integer pointx = deque.poll();  // 弹出车站Integer distance = dict.get(pointx);List<Integer> list = map.get(pointx);  // 得到公交车列表for (int i = 0; i < list.size(); i++) {Integer car = list.get(i); // 获取公交车if (!set.contains(car)) {  // 这个公交车没有用过int[] route = routes[car];   // 得到所有对应的车子for (int j = 0; j < route.length; j++) {int pointy = route[j];if (!dict.containsKey(pointy)) {dict.put(pointy, distance + 1);deque.add(pointy);}}set.add(car);}}}if (dict.get(target) != null) {return dict.get(target);}return -1;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com