package com.fishercoder.solutions; import java.util.PriorityQueue; public class _1792 { public static class Solution1 { /** * We use the change size to order the elements in the maxHeap. */ public double maxAverageRatio(int[][] classes, int extraStudents) { PriorityQueue<double[]> maxHeap = new PriorityQueue<>((a, b) -> -Double.compare(a[0], b[0])); for (int[] c : classes) { maxHeap.offer(new double[]{(double) (c[0] + 1) / (c[1] + 1) - (double) c[0] / c[1], c[0], c[1]}); } while (extraStudents-- > 0) { double[] curr = maxHeap.poll(); curr[1]++; curr[2]++; curr[0] = (curr[1] + 1) / (curr[2] + 1) - curr[1] / curr[2]; maxHeap.offer(curr); } double result = 0.0; int size = maxHeap.size(); while (!maxHeap.isEmpty()) { double[] curr = maxHeap.poll(); result += curr[1] / curr[2]; } return result / size; } } }