From fea63bf5622a37387b1cf2f2f5ab680c53d9bf31 Mon Sep 17 00:00:00 2001 From: Liqun Li Date: Mon, 30 May 2022 13:58:34 -0700 Subject: [PATCH] leetcode 815: Bus-Routes: updated/added a java solution --- BFS/815.Bus-Routes/815.Bus-Routes.java | 45 ++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 BFS/815.Bus-Routes/815.Bus-Routes.java diff --git a/BFS/815.Bus-Routes/815.Bus-Routes.java b/BFS/815.Bus-Routes/815.Bus-Routes.java new file mode 100644 index 000000000..a19b6db1a --- /dev/null +++ b/BFS/815.Bus-Routes/815.Bus-Routes.java @@ -0,0 +1,45 @@ +class Solution { + public int numBusesToDestination(int[][] routes, int source, int target) { + if (source == target) + return 0; + + int maxStop = -1; + for (int [] r : routes) + for (int stp : r) + maxStop = Math.max(maxStop, stp); + + if (target > maxStop) + return -1; + + int rtLen = routes.length; + int [] stops = new int [maxStop + 1]; + Arrays.fill(stops, rtLen + 1); + + stops[source] = 0; + boolean isUpdated = true; + + while (isUpdated) { + + isUpdated = false; + for (int [] rt : routes) { + + int numberOfBuses = rtLen + 1; + for (int stp : rt) + + if ( stops[stp] < numberOfBuses ) + numberOfBuses = stops[stp]; + + numberOfBuses ++; + + for (int stp : rt) + if (stops[stp] > numberOfBuses) { + stops[stp] = numberOfBuses; + isUpdated = true; + } + } + } + + return stops[target] != rtLen + 1 ?stops[target] : -1; + + } +}