1792。最大平均通过率
难度:中等
主题:数组、贪婪、堆(优先队列)
有一所学校有学生班级,每个班级都会有期末考试。给你一个二维整数数组类,其中classes[i] = [passi,totali]。你事先知道第i第班共有i名学生,但只有通过i名学生才能通过考试。
您还获得了一个整数 extraStudents。还有另外一些优秀的学生保证通过他们分配到的任何班级的考试。您希望以最大化所有班级的平均通过率的方式将每个extraStudents学生分配到一个班级。
班级的通过率等于该班级通过考试的学生人数除以该班级的学生总数。 平均通过率是所有班级的通过率总和除以班级数量。
分配额外学生后,返回最大可能的平均通过率。实际答案 10-5 以内的答案将被接受。
示例1:
示例2:
约束:
提示:
解决方案:
我们可以使用最大堆(优先级队列)。这是因为在添加额外的学生时,我们需要有效地找到最受益的班级(最大化通过率的变化)。
了解增益计算:
使用最大堆:
迭代分配额外的学生:
计算最终平均值:
让我们用 PHP 实现这个解决方案:1792。最大平均通过率
<?php /** * @param Integer[][] $classes * @param Integer $extraStudents * @return Float */ function maxAverageRatio($classes, $extraStudents) { ... ... ... /** * go to ./solution.php */ } /** * Calculate the extra pass ratio when a student is added to the class * * @param $pass * @param $total * @return float|int */ private function extraPassRatio($pass, $total) { ... ... ... /** * go to ./solution.php */ } // Example usage: $classes = [[1, 2], [3, 5], [2, 2]]; $extraStudents = 2; echo maxAverageRatio($classes, $extraStudents); // Output: 0.78333 $classes = [[2, 4], [3, 9], [4, 5], [2, 10]]; $extraStudents = 4; echo maxAverageRatio($classes, $extraStudents); // Output: 0.53485 ?>
堆设置:
分配额外的学生:
最终平均计算:
精确:
时间复杂度:
空间复杂度:
此实现有效地分配额外的学生并计算最大平均通过率。
联系链接
如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!
如果您想要更多类似的有用内容,请随时关注我:
以上是最大平均通过率的详细内容。更多信息请关注PHP中文网其他相关文章!