@@ -7,33 +7,32 @@ impl Solution {
77 pub fn max_performance ( n : i32 , speed : Vec < i32 > , efficiency : Vec < i32 > , k : i32 ) -> i32 {
88 let mut groups = speed
99 . into_iter ( )
10- . zip ( efficiency. into_iter ( ) )
11- . collect :: < Vec < ( i32 , i32 ) > > ( ) ;
10+ . map ( |x| x as i64 )
11+ . zip ( efficiency. into_iter ( ) . map ( |x| x as i64 ) )
12+ . collect :: < Vec < ( i64 , i64 ) > > ( ) ;
1213 groups. sort_by ( |a, b| b. 1 . cmp ( & a. 1 ) ) ;
13- let ( speeds, efficiencies) : ( Vec < i32 > , Vec < i32 > ) = groups. iter ( ) . cloned ( ) . unzip ( ) ;
14+ let ( speeds, efficiencies) : ( Vec < i64 > , Vec < i64 > ) = groups. iter ( ) . cloned ( ) . unzip ( ) ;
1415 let mut speed_queue = BinaryHeap :: new ( ) ; // lowest priority queue
1516 let mut total_speed = 0 ;
17+ let mut result = 0 ;
1618 for i in 0 ..k as usize {
1719 speed_queue. push ( Reverse ( speeds[ i] ) ) ;
1820 total_speed += speeds[ i] ;
21+ result = result. max ( total_speed * efficiencies[ i] ) ;
1922 }
20- let mut result = total_speed * efficiencies[ k as usize - 1 ] ;
2123 // try another new engineer with lower efficiency
2224 for i in k as usize ..n as usize {
2325 let lowest_speed = speed_queue. peek ( ) . unwrap ( ) . 0 ;
2426 let new_speed = speeds[ i] ;
2527 if lowest_speed > new_speed {
2628 continue ;
2729 }
28- let new_result = ( total_speed + new_speed - lowest_speed) * efficiencies[ i] ;
29- if new_result < result {
30- continue ;
31- }
30+ total_speed += new_speed - lowest_speed;
31+ result = result. max ( total_speed * efficiencies[ i] ) ;
3232 speed_queue. pop ( ) ;
3333 speed_queue. push ( Reverse ( new_speed) ) ;
34- result = new_result;
3534 }
36- result
35+ ( result % 1000000007 ) as i32
3736 }
3837}
3938
0 commit comments