按照提示,设置heap,以每个课程的(pass + 1/ total + 1) - (pass / total)为增量值,排列pass,total的对子。随后弹出增量最大的,更新pass和total值。最后记得把heap中的新的值拿出来做最后的ratio计算。
class Solution:
def maxAverageRatio(self, classes: List[List[int]], extraStudents: int) -> float:
heap = []
for the_pass, the_total in classes:
inc = ((the_pass+1)/(the_total+1)) - (the_pass /the_total)
heapq.heappush(heap, (-inc, (the_pass, the_total)))
while extraStudents:
curinc, (cur_pass, cur_total) = heapq.heappop(heap)
cur_pass += 1
cur_total += 1
newinc = ((cur_pass+1)/(cur_total+1)) - (cur_pass /cur_total)
heapq.heappush(heap, (-newinc, (cur_pass, cur_total)))
extraStudents -= 1
res = 0
for _,(pas,tol) in heap:
res += (pas/tol)
return res/len(classes)