Re: [閒聊] 每日leetcode

看板Marginalman作者 (leaf)時間3月前 (2025/09/01 18:27), 編輯推噓1(100)
留言1則, 1人參與, 3月前最新討論串1510/1548 (看更多)
1792. Maximum Average Pass Ratio https://leetcode.com/problems/maximum-average-pass-ratio/ 給定一個列表classes, 每個元素(班級)都是包含兩個整數的列表, 代表該班級中可以通過期末考的人數與班級總人數 現在你需要安排extraStudents個學生到班級中, 使平均的班級考試通過率最大化 思路: 很顯然, 最優先分配學生的班級是新增後與新增前差距最大的班級, 那可以使用堆來實現 由於排序依據是新增學生後與新增前的差距, 而且Python預設的堆是小頂堆, 因此還需要把該差距算出來放在每個列表前面, 且要加上負號 之後每放入一個學生, 就把該班級拿出來再重新放進去即可 -- Python code: class Solution: def maxAverageRatio(self, classes: List[List[int]], extraStudents: int) -> float: n = len(classes) if n == 1: return (classes[0][0]+extraStudents)/(classes[0][1]+ extraStudents) r = lambda x, y: (x+1)/(y+1)-x/y classes = [(-r(x, y), x, y) for x, y in classes] heapq.heapify(classes) for _ in range(extraStudents): heapq.heapreplace(classes, (-r(classes[0][1]+1, classes[0][2]+1), classes[0][1]+1, classes[0][2]+1)) return sum(c[1]/c[2] for c in classes) / n -- 咖啡是一種豆漿, 茶是一種蔬菜湯。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.166.205 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1756722422.A.DBD.html

09/01 18:27, 3月前 , 1F
大師
09/01 18:27, 1F
文章代碼(AID): #1ejNJssz (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1ejNJssz (Marginalman)