Skip to content

Commit cac2dd7

Browse files
Time: 337 ms (68.91%) | Memory: 105.9 MB (6.74%) - LeetSync
1 parent 2c464d2 commit cac2dd7

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
class Solution {
2+
public double maxAverageRatio(int[][] classes, int extraStudents) {
3+
int n = classes.length;
4+
5+
// Priority queue to act as a max-heap, storing pairs of {max-delta, index}
6+
PriorityQueue<double[]> pq = new PriorityQueue<>((a, b) -> Double.compare(b[0], a[0]));
7+
8+
// Initialize the priority queue with the delta values and indices
9+
for (int i = 0; i < n; i++) {
10+
double currentPR = (double) classes[i][0] / classes[i][1];
11+
double newPR = (double) (classes[i][0] + 1) / (classes[i][1] + 1);
12+
double delta = newPR - currentPR;
13+
pq.offer(new double[]{delta, i});
14+
}
15+
16+
// Allocate extra students
17+
while (extraStudents-- > 0) {
18+
// Extract the class with the maximum delta
19+
double[] current = pq.poll();
20+
int index = (int) current[1];
21+
22+
// Update the class with an extra student
23+
classes[index][0]++;
24+
classes[index][1]++;
25+
26+
// Recalculate the delta for this class
27+
double currentPR = (double) classes[index][0] / classes[index][1];
28+
double newPR = (double) (classes[index][0] + 1) / (classes[index][1] + 1);
29+
double delta = newPR - currentPR;
30+
31+
// Push the updated delta and index back into the priority queue
32+
pq.offer(new double[]{delta, index});
33+
}
34+
35+
// Calculate the final average pass ratio
36+
double result = 0.0;
37+
for (int i = 0; i < n; i++) {
38+
result += (double) classes[i][0] / classes[i][1];
39+
}
40+
return result / n;
41+
}
42+
}

0 commit comments

Comments
 (0)