type
status
date
slug
summary
tags
category
icon
password
创建时间
Aug 21, 2025 02:37 PM
一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组
classes
,其中 classes[i] = [passi, totali]
,表示你提前知道了第 i
个班级总共有 totali
个学生,其中只有 passi
个学生可以通过考试。给你一个整数
extraStudents
,表示额外有 extraStudents
个聪明的学生,他们 一定 能通过任何班级的期末考。你需要给这 extraStudents
个学生每人都安排一个班级,使得 所有 班级的 平均 通过率 最大 。一个班级的 通过率 等于这个班级通过考试的学生人数除以这个班级的总人数。平均通过率 是所有班级的通过率之和除以班级数目。
请你返回在安排这
extraStudents
个学生去对应班级后的 最大 平均通过率。与标准答案误差范围在 10-5
以内的结果都会视为正确结果。堆(优先队列)§5.1 基础
我的想法是两步看
- 先看差值,优先选择差值小的;
- 再看比率,差值相同,优先选择比率小的
这样会导致永远只会选择差值为 1 的,并不能得到最优解。
我们的目的是一个班增加一些人,使其通过率变大。
上面的做法,我堪虑到了,通过率的增加值会随着分子和分母开的变大,反而会变小,也就是边际递减效应。我们应该选择其中通过率变化最大的一个班级。
📎 参考
- 无