Get Watched Videos by Your Friends LeetCode solution in Rust

1
use std::collections::{HashMap, VecDeque};
2

3
impl Solution {
4
pub fn watched_videos_by_friends(
5
watched_videos: Vec<Vec<String>>,
6
friends: Vec<Vec<i32>>,
7
id: i32,
8
level: i32,
9
) -> Vec<String> {
10
let mut queue = VecDeque::from([id as usize]);
11
let mut visited = vec![false; friends.len()];
12
visited[id as usize] = true;
13
for _ in 0..level {
14
let len = queue.len();
15
for _ in 0..len {
16
if let Some(node) = queue.pop_front() {
17
for nei in friends[node as usize].iter().map(|&nei| nei as usize) {
18
if !visited[nei] {
19
queue.push_back(nei);
20
visited[nei] = true;
21
}
22
}
23
}
24
}
25
}
26

27
let mut watched_videos = queue
28
.into_iter()
29
.fold(HashMap::new(), |mut freq, user| {
30
watched_videos[user].iter().fold(freq, |mut freq, v| {
31
*freq.entry(v).or_insert(0) += 1;
32
freq
33
})
34
})
35
.into_iter()
36
.collect::<Vec<_>>();
37
watched_videos.sort_unstable_by(|(v_a, f_a), (v_b, f_b)| {
38
if f_a == f_b {
39
v_a.cmp(&v_b)
40
} else {
41
f_a.cmp(&f_b)
42
}
43
});
44
watched_videos
45
.into_iter()
46
.map(|(v, _)| v.to_string())
47
.collect()
48
}
49
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0