Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
69 lines (63 loc) · 2.04 KB

File metadata and controls

69 lines (63 loc) · 2.04 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
H
1534208810
tags: BFS
```
/*
We have a list of bus routes. Each routes[i] is a bus route that the i-th bus repeats forever.
For example if routes[0] = [1, 5, 7], this means that the first bus (0-th indexed)
travels in the sequence 1->5->7->1->5->7->1->... forever.
We start at bus stop S (initially not on a bus), and we want to go to bus stop T.
Travelling by buses only, what is the least number of buses we must take to reach our destination?
Return -1 if it is not possible.
Example:
Input:
routes = [[1, 2, 7], [3, 6, 7]]
S = 1
T = 6
Output: 2
Explanation:
The best strategy is take the first bus to the bus stop 7, then take the second bus to the bus stop 6.
Note:
1 <= routes.length <= 500.
1 <= routes[i].length <= 500.
0 <= routes[i][j] < 10 ^ 6.
*/
/*
1. Map stop -> bus list
2. Add stop to queue
3. process queue, if stop match return; otherwise, try the linked bus (track visited bus)
*/
class Solution {
public int numBusesToDestination(int[][] routes, int S, int T) {
Set<Integer> visited = new HashSet<>();
Map<Integer, Set<Integer>> stopMap = new HashMap<>();
Queue<Integer> queue = new LinkedList<>();
// init
for (int i = 0; i < routes.length; i++) {
for (int stop : routes[i]) {
stopMap.putIfAbsent(stop, new HashSet<>());
stopMap.get(stop).add(i); // add bus route to stop
}
}
queue.offer(S);
int count = 0;
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
int stop = queue.poll(); // 1, 2, 7
if (stop == T) return count;
for (int bus : stopMap.get(stop)) {
if (!visited.contains(bus)) {
visited.add(bus);
for (int nextStop : routes[bus]) {
queue.offer(nextStop); // 3, 6, 7
}
}
}
}
count++;
}
return -1;
}
}
```
Morty Proxy This is a proxified and sanitized view of the page, visit original site.