# [1792] Maximum Average Pass Ratio ## 題目資訊 - **難度**: Medium - **標籤**: Array, Greedy, Heap(Priority Queue) - **題目連結**: [LeetCode](https://leetcode.com/problems/maximum-average-pass-ratio/) - **練習日期**: 2025-09-01 ## 題目描述 There is a school that has classes of students and each class will be having a final exam. You are given a 2D integer array `classes`, where `classes[i] = [passi, totali]`. You know beforehand that in the `ith` class, there are `totali` total students, but only `passi` number of students will pass the exam. You are also given an integer `extraStudents`. There are another `extraStudents` brilliant students that are **guaranteed** to pass the exam of any class they are assigned to. You want to assign each of the `extraStudents` students to a class in a way that **maximizes** the **average** pass ratio across **all** the classes. The **pass ratio** of a class is equal to the number of students of the class that will pass the exam divided by the total number of students of the class. The **average pass ratio** is the sum of pass ratios of all the classes divided by the number of the classes. Return the *maximum* possible average pass ratio after assigning the `extraStudents` students. Answers within `10-5` of the actual answer will be accepted. ## 解題思路 ### 初步分析 - 這題主要考察什麼概念? - 貪心算法,找出每次分配學生,通過率可以提升至最高 - Pass Ratio = pass / total - Average Pass Ratio = sum of pass ration / number of class ### 解法概述 1. **暴力解法**: - 思路: - 每次分配一個學生看哪個班級提升率會最高 - leetcode 這邊會 time limit exceeded - 時間複雜度:O(N) - 空間複雜度:O(N) 2. **最佳解法**: - 思路: - Priority Queue(Max Heap) 存每個班級潛在 - 時間複雜度:O(?) - 空間複雜度:O(?) ## 測試案例 ### 範例輸入輸出 ``` Input: classes = [[1,2],[3,5],[2,2]], extraStudents = 2 Output: 0.78333 Explanation: You can assign the two extra students to the first class. The average pass ratio will be equal to (3/4 + 3/5 + 2/2) / 3 = 0.78333. ``` ### 邊界情況 - 1 <= classes.length <= 10^5 - classes[i].length == 2 - 1 <= passi <= totali <= 10^5 - 1 <= extraStudents <= 10^5 ## 學習筆記 ### 今天學到什麼? - 第一次使用 Priority Queue - 第一次使用 Unit Test ### 遇到的困難 - 可能要再了解 Priority Queue 更多實際用途 ### 改善方向 - ### 相關題目 - [#1627](https://leetcode.com/problems/graph-connectivity-with-threshold/description/) Graph Connectivity With Threshold - [#1728](https://leetcode.com/problems/cat-and-mouse-ii/description/) Cat and Mouse II - [#3440](https://leetcode.com/problems/reschedule-meetings-for-maximum-free-time-ii/description/) Reschedule Meetings for Maximum Free Time II --- **總結**: 1. 貪心策略,每次都選擇當下收益最大解 2. 練習使用Priority Queue 快速找到最大收益