Solution to the Leetcode link:
public double maxAverageRatio(int[][] classes, int extraStudents) {
PriorityQueue<double[]> pq = new PriorityQueue<>((a, b) → {
Double aGain = ((a[0] + 1) / (a[1] + 1)) - (a[0] / a[1]);
Double bGain = ((b[0] + 1) / (b[1] + 1)) - (b[0] / b[1]);
return -aGain.compareTo(bGain);
});
for (int i = 0; i < classes.length; i++) {
pq.add(new double[]{classes[i][0], classes[i][1]});
}
for (int i = 0; i < extraStudents; i++) {
double[] currentClass = pq.poll();
currentClass[0]++;
currentClass[1]++;
pq.add(currentClass);
}
double sum = 0;
while(!pq.isEmpty()) {
double[] currentClass = pq.poll();
sum += currentClass[0] / currentClass[1];
}
return sum / classes.length;
}