File tree 1 file changed +34
-0
lines changed
1 file changed +34
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments