1
- use std:: collections:: BinaryHeap ;
2
- use std:: cmp:: { Ordering , Reverse } ;
3
-
4
1
impl Solution {
5
- pub fn reconstruct_queue ( people : Vec < Vec < i32 > > ) -> Vec < Vec < i32 > > {
6
- if people. len ( ) <= 1 {
2
+ pub fn reconstruct_queue ( mut people : Vec < Vec < i32 > > ) -> Vec < Vec < i32 > > {
3
+ let n = people. len ( ) ;
4
+ if n <= 1 {
7
5
return people;
8
6
}
9
- let mut heap = BinaryHeap :: new ( ) ;
10
- for item in people {
11
- heap. push ( Reverse ( Pair ( item[ 0 ] , item[ 1 ] ) ) ) ;
12
- }
13
- let n = heap. len ( ) ;
14
- let mut ans: Vec < Option < Vec < i32 > > > = vec ! [ None ; n] ;
15
- while !heap. is_empty ( ) {
16
- let cur = heap. pop ( ) . unwrap ( ) . 0 ;
17
- let mut count = 0 ;
18
- let mut idx = 0 ;
19
- while cur. 1 > count {
20
- if ans[ idx] . is_none ( ) {
21
- count+=1 ;
22
- }
23
- idx+=1 ;
7
+ people. sort_by ( |a, b| {
8
+ if a[ 0 ] == b[ 0 ] {
9
+ a[ 1 ] . cmp ( & b[ 1 ] )
10
+ } else {
11
+ b[ 0 ] . cmp ( & a[ 0 ] )
24
12
}
25
- while idx < n && ans[ idx] . is_some ( ) { idx+=1 ; }
26
- ans[ idx] = Some ( vec ! [ cur. 0 , cur. 1 ] ) ;
27
- }
28
- ans. into_iter ( ) . map ( |x| x. unwrap ( ) ) . collect ( )
29
- }
30
- }
31
-
32
- #[ derive( Eq , PartialEq , Copy , Clone ) ]
33
- struct Pair ( i32 , i32 ) ;
34
-
35
- impl Ord for Pair {
36
- fn cmp ( & self , other : & Self ) -> Ordering {
37
- let t = self . 0 . cmp ( & other. 0 ) ;
38
- match t {
39
- Ordering :: Equal => other. 1 . cmp ( & self . 1 ) ,
40
- _ => t,
13
+ } ) ;
14
+ let mut ans = vec ! [ ] ;
15
+ for item in people {
16
+ ans. insert ( item[ 1 ] as usize , item) ;
41
17
}
42
- }
43
- }
44
-
45
- impl PartialOrd for Pair {
46
- fn partial_cmp ( & self , other : & Self ) -> Option < Ordering > {
47
- Some ( self . cmp ( other) )
18
+ ans
48
19
}
49
20
}
50
21
@@ -60,7 +31,7 @@ mod tests {
60
31
( vec![ vec![ 1 , 1 ] , vec![ 2 , 0 ] ] , vec![ vec![ 2 , 0 ] , vec![ 1 , 1 ] ] ) ,
61
32
] ;
62
33
for ( num, expect) in test_cases {
63
- assert_eq ! ( expect , Solution :: reconstruct_queue( num. clone( ) ) , "num: {:?}" , num) ;
34
+ assert_eq ! ( Solution :: reconstruct_queue( num. clone( ) ) , expect , "num: {:?}" , num) ;
64
35
}
65
36
}
66
37
}
0 commit comments