problems(rs): add “1376. Time Needed to Inform All Employees”
Signed-off-by: Matej Focko <mfocko@redhat.com>
This commit is contained in:
parent
efeafcae88
commit
e0f7ae0937
1 changed files with 37 additions and 0 deletions
37
problems/rs/time-needed-to-inform-all-employees.rs
Normal file
37
problems/rs/time-needed-to-inform-all-employees.rs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
use std::collections::{HashMap, HashSet, VecDeque};
|
||||||
|
|
||||||
|
impl Solution {
|
||||||
|
fn from_managers(managers: &[i32]) -> HashMap<usize, HashSet<usize>> {
|
||||||
|
let mut mapping = HashMap::new();
|
||||||
|
|
||||||
|
for (i, manager) in managers
|
||||||
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
.filter(|&(_, &manager)| manager != -1)
|
||||||
|
{
|
||||||
|
mapping
|
||||||
|
.entry(*manager as usize)
|
||||||
|
.or_insert_with(HashSet::new)
|
||||||
|
.insert(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
mapping
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn num_of_minutes(_n: i32, head_id: i32, manager: Vec<i32>, inform_time: Vec<i32>) -> i32 {
|
||||||
|
let manager_mapping = Solution::from_managers(&manager);
|
||||||
|
|
||||||
|
let mut q = VecDeque::new();
|
||||||
|
q.push_back((head_id as usize, 0));
|
||||||
|
|
||||||
|
let mut minutes = -1;
|
||||||
|
while let Some((manager, t)) = q.pop_front() {
|
||||||
|
minutes = std::cmp::max(minutes, t);
|
||||||
|
|
||||||
|
for employee in manager_mapping.get(&manager).unwrap_or(&HashSet::new()) {
|
||||||
|
q.push_back((*employee, t + inform_time[manager]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
minutes
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue