Re: [閒聊] 每日leetcode
https://leetcode.com/problems/maximum-average-pass-ratio
1792. Maximum Average Pass Ratio
給你一個陣列 classes[i] = [passi, totali] 表示每堂課的通過數和學生總數,我們
可以在任意課堂插入 extraStudents 個一定會修過的學霸,求出要把這些學霸怎麼安排
可以讓所有課程的平均通過率最高。
1.先把所有通過率加總。
2.每個課程安排一個學霸可以讓機率提升 (p+1/t+1 - p/t),我們用一個最大堆紀錄每個
課程安排學霸時可以提升的機率,每次都pop出機率最高的那個並把增加的機率加總。
3.最後把加總結果除以課堂數就好。
Java Code
-----------------------------------------------------
class Solution {
public double maxAverageRatio(int[][] classes, int extraStudents) {
double ans = 0;
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) ->
Double.compare(calculateRatio(b), calculateRatio(a)));
for (int[] clazz : classes) {
pq.add(clazz);
ans += (double) clazz[0] / clazz[1];
}
while (extraStudents-- > 0) {
int[] clazz = pq.poll();
ans += calculateRatio(clazz);
clazz[0]++;
clazz[1]++;
pq.add(clazz);
}
return ans / classes.length;
}
double calculateRatio(int[] num) {
int x = num[0], y = num[1];
return (double) (x + 1) / (y + 1) - (double) x / y;
}
}
-----------------------------------------------------
--
https://i.imgur.com/bmDGM17.jpeg

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.158.191.3 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1734245195.A.A74.html
討論串 (同標題文章)
完整討論串 (本文為第 1207 之 1554 篇):