难度:
Hard
题意:
思路:
代码:
class Solution {
public double mincostToHireWorkers(int[] quality, int[] wage, int K) {
double[] ratio = new double[quality.length];
Integer[] pos = new Integer[quality.length];
for (int i = 0;i < quality.length;i++) {
ratio[i] = (double) wage[i] / quality[i];
pos[i] = i;
}
Arrays.sort(pos, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Double.compare(ratio[o1], ratio[o2]);
}
});
double ret = 1e40;
int maxK = 0;
PriorityQueue<Integer> queue = new PriorityQueue<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return -Integer.compare(o1, o2);
}
});
for (int i = 0;i < pos.length;i++) {
maxK += quality[pos[i]];
queue.add(quality[pos[i]]);
if (queue.size() > K) {
maxK -= queue.poll();
}
if (queue.size() == K) {
ret = ret > maxK * ratio[pos[i]] ? maxK * ratio[pos[i]] : ret;
}
}
return ret;
}
}