100-days-of-rust/Week-04/Day-27_Task-Scheduler/day27/src/lib.rs

36 lines
897 B
Rust
Raw Normal View History

2024-08-21 20:02:19 +00:00
use std::collections::HashMap;
pub fn task_scheduler(tasks: &[char], coldown: u8) -> u16 {
let mut num_tasks = HashMap::new();
for task in tasks {
*num_tasks.entry(task).or_insert(0) += 1;
}
let mut num_tasks: Vec<(&&char, &i32)> = num_tasks.iter().collect();
num_tasks.sort_by(|a, b| b.1.cmp(a.1));
let mut result = 0;
let mut pos = 0;
let mut range = 1;
for _ in 0..tasks.len() {
if num_tasks.get(pos as usize).is_none() {
result += if pos > coldown as u16 {
0
} else {
coldown as u16 - pos + 1
};
pos = 0;
range += 1;
}
if *num_tasks.get(pos as usize).unwrap().1 < range {
result += coldown as u16 - pos;
pos = 0;
range += 1;
}
result += 1;
pos += 1;
}
result
}