Skip to content

Commit d5c9f5d

Browse files
committed
Create: 0621-task-scheduler.rs
1 parent 66ab0a3 commit d5c9f5d

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

rust/0621-task-scheduler.rs

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
use std::collections::{BinaryHeap, VecDeque, HashMap};
2+
3+
impl Solution {
4+
pub fn least_interval(tasks: Vec<char>, n: i32) -> i32 {
5+
let mut count = HashMap::new();
6+
let mut max_heap = BinaryHeap::new();
7+
for task in tasks {
8+
let count = count.entry(task).or_insert(0);
9+
*count += 1;
10+
}
11+
for (key, val) in count.iter() {
12+
max_heap.push(*val);
13+
}
14+
let mut time = 0;
15+
let mut deque: VecDeque<(i32,i32)> = VecDeque::new();
16+
while deque.len() > 0 || max_heap.len() > 0 {
17+
time += 1;
18+
19+
if max_heap.len() == 0 {
20+
time = deque[0].1;
21+
}
22+
else {
23+
let cnt = max_heap.pop().unwrap() - 1;
24+
if cnt != 0 {
25+
deque.push_back((cnt, time + n));
26+
}
27+
}
28+
if deque.len() > 0 && deque[0].1 == time {
29+
max_heap.push(deque.pop_front().unwrap().0);
30+
}
31+
}
32+
time
33+
}
34+
}

0 commit comments

Comments
 (0)