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中文網其他相關文章!