Skip to content

Commit d870ed3

Browse files
committed
feat: resolve examples
1 parent c8ecc16 commit d870ed3

File tree

1 file changed

+47
-1
lines changed
  • maximum_performance_of_a_team/src

1 file changed

+47
-1
lines changed

maximum_performance_of_a_team/src/lib.rs

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,40 @@
1+
use std::cmp::Reverse;
2+
use std::collections::BinaryHeap;
3+
14
pub struct Solution {}
25

36
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+
}
538
}
639

740
#[cfg(test)]
@@ -46,4 +79,17 @@ mod tests {
4679
expected
4780
);
4881
}
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+
}
4995
}

0 commit comments

Comments
 (0)