Get Watched Videos by Your Friends LeetCode solution in Java

1
class Solution {
2
public List<String> watchedVideosByFriends(
3
List<List<String>> watchedVideos, int[][] friends, int id, int level) {
4
int n = friends.length;
5
boolean[] visited = new boolean[n];
6
List<List<Integer>> graph = new ArrayList<>();
7
for (int i = 0; i < n; i++) graph.add(new ArrayList<>());
8
for (int i = 0; i < n; i++) {
9
for (int j = 0; j < friends[i].length; j++) {
10
graph.get(i).add(friends[i][j]);
11
}
12
}
13
// System.out.println(graph.get(0));
14
Queue<Integer> queue = new ArrayDeque<>();
15
queue.offer(id);
16
visited[id] = true;
17
Map<String, Integer> answer = new HashMap<>();
18
while (!queue.isEmpty() && level > 0) {
19
int size = queue.size();
20
for (int i = 0; i < size; i++) {
21
int vertex = queue.remove();
22
for (int child : graph.get(vertex)) {
23
if (!visited[child]) {
24
// if(level == 1) System.out.println(watchedVideos.get(child));
25
if (level == 1) {
26
for (String a : watchedVideos.get(child)) {
27
answer.put(a, answer.getOrDefault(a, 0) + 1);
28
}
29
}
30
visited[child] = true;
31
queue.offer(child);
32
}
33
}
34
}
35
level--;
36
}
37
Queue<String[]> sortedQueue =
38
new PriorityQueue<>(
39
(a, b) -> {
40
if (a[1].equals(b[1])) return a[0].compareTo(b[0]);
41
return Integer.parseInt(a[1]) - Integer.parseInt(b[1]);
42
});
43
for (String key : answer.keySet()) {
44
sortedQueue.offer(new String[] {key, Integer.toString(answer.get(key))});
45
}
46
List<String> finalAnswer = new ArrayList<>();
47
while (!sortedQueue.isEmpty()) finalAnswer.add(sortedQueue.remove()[0]);
48
return finalAnswer;
49
}
50
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0