|
| 1 | +use std::cmp::Reverse; |
| 2 | +use std::collections::BinaryHeap; |
| 3 | + |
1 | 4 | pub struct Solution {}
|
2 | 5 |
|
3 | 6 | impl Solution {
|
4 |
| - pub fn max_performance(n: i32, speed: Vec<i32>, efficiency: Vec<i32>, k: i32) -> i32 {} |
| 7 | + pub fn max_performance(n: i32, speed: Vec<i32>, efficiency: Vec<i32>, k: i32) -> i32 { |
| 8 | + let mut groups = speed |
| 9 | + .into_iter() |
| 10 | + .zip(efficiency.into_iter()) |
| 11 | + .collect::<Vec<(i32, i32)>>(); |
| 12 | + groups.sort_by(|a, b| b.1.cmp(&a.1)); |
| 13 | + let (speeds, efficiencies): (Vec<i32>, Vec<i32>) = groups.iter().cloned().unzip(); |
| 14 | + let mut speed_queue = BinaryHeap::new(); // lowest priority queue |
| 15 | + let mut total_speed = 0; |
| 16 | + for i in 0..k as usize { |
| 17 | + speed_queue.push(Reverse(speeds[i])); |
| 18 | + total_speed += speeds[i]; |
| 19 | + } |
| 20 | + let mut result = total_speed * efficiencies[k as usize - 1]; |
| 21 | + // try another new engineer with lower efficiency |
| 22 | + for i in k as usize..n as usize { |
| 23 | + let lowest_speed = speed_queue.peek().unwrap().0; |
| 24 | + let new_speed = speeds[i]; |
| 25 | + if lowest_speed > new_speed { |
| 26 | + continue; |
| 27 | + } |
| 28 | + let new_result = (total_speed + new_speed - lowest_speed) * efficiencies[i]; |
| 29 | + if new_result < result { |
| 30 | + continue; |
| 31 | + } |
| 32 | + speed_queue.pop(); |
| 33 | + speed_queue.push(Reverse(new_speed)); |
| 34 | + result = new_result; |
| 35 | + } |
| 36 | + result |
| 37 | + } |
5 | 38 | }
|
6 | 39 |
|
7 | 40 | #[cfg(test)]
|
@@ -46,4 +79,17 @@ mod tests {
|
46 | 79 | expected
|
47 | 80 | );
|
48 | 81 | }
|
| 82 | + |
| 83 | + #[test] |
| 84 | + fn submission_1() { |
| 85 | + let n = 3; |
| 86 | + let speed = [2, 8, 2]; |
| 87 | + let efficiency = [2, 7, 1]; |
| 88 | + let k = 2; |
| 89 | + let expected = 56; |
| 90 | + assert_eq!( |
| 91 | + Solution::max_performance(n, speed.to_vec(), efficiency.to_vec(), k), |
| 92 | + expected |
| 93 | + ); |
| 94 | + } |
49 | 95 | }
|
0 commit comments