March 15, 2020

# 1383. Maximum Performance of a Team

1383. Maximum Performance of a Team

Weekly Contest 180. Referred to this post.

``````class Solution {
public int maxPerformance(int n, int[] speed, int[] efficiency, int k) {
int MOD = (int) (1e9 + 7);

int[][] engineers = new int[speed.length];
for (int i = 0; i < speed.length; i++) {
engineers[i] = new int[]{speed[i], efficiency[i]};
}
// Sort efficiency in descending order.
Arrays.sort(engineers, new Comparator<int[]> () {
@Override
public int compare(int[] o1, int[] o2) {
return o2 - o1;
}
});

// Maintain a pq to track of the minimum speed in the group.
PriorityQueue<Integer> pq = new PriorityQueue<>(k);

long res = Long.MIN_VALUE;
long totalSpeed = 0;
for (int[] engineer : engineers) {
if (pq.size() == k) {
totalSpeed -= pq.poll(); // layoff the one with min speed
}
pq.add(engineer);
totalSpeed = (totalSpeed + engineer);
res = Math.max(res, (totalSpeed * engineer));
}
return (int) (res % MOD);

}
}
``````
comments powered by Disqus