Skip to content

Commit 30a4d0f

Browse files
committed
feat: resolved
1 parent d870ed3 commit 30a4d0f

File tree

1 file changed

+9
-10
lines changed
  • maximum_performance_of_a_team/src

1 file changed

+9
-10
lines changed

maximum_performance_of_a_team/src/lib.rs

+9-10
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)