LeetCode 1792 最大平均通過率(堆)

2021-10-22 05:50:24 字數 1148 閱讀 8406

題意:

一所學校裡有一些班級,每個班級裡有一些學生,現在每個班都會進行一場期末考試。

給你乙個二維陣列 classes ,其中 classes[i]

=[passi, totali] ,

表示你提前知道了第 i 個班級總共有 totali 個學生,其中只有 passi 個學生可以通過考試。

給你乙個整數 extrastudents ,表示額外有 extrastudents 個聰明的學生,他們 一定 能通過任何班級的期末考。

你需要給這 extrastudents 個學生每人都安排乙個班級,使得 所有 班級的 平均 通過率 最大 。

乙個班級的 通過率 等於這個班級通過考試的學生人數除以這個班級的總人數。

平均通過率 是所有班級的通過率之和除以班級數目。

請你返回在安排這 extrastudents 個學生去對應班級後的 最大 平均通過率。

與標準答案誤差範圍在 1e-5 以內的結果都會視為正確結果。

資料範圍:

1<= classes.length <=

1e5classes[i]

.length ==21

<= passi <= totali <=

1e51

<= extrastudents <=

1e5

解法:
因為班級數量是固定的,最大化平均通過率其實就是最大化總通過率.

對於(x,y)

,加乙個學生之後變成(x+

1,y+1)

,通過率的變化量為(x+1)

/(y+1)

-x/y.

用乙個堆存所有二元組(x,y)

,每次貪心地取出變化量最大的出來即可.

原理是每次新增之後,下一次新增的變化量一定會比這次小,所以每次用堆選出變化量最大的.

code:
struct pi};

class

solution);

}while

(p--

)double ans=0;

while

(q.size()

) ans/=(

int)e.

size()

;return ans;}}

;

LeetCode813 最大平均值和的分組

我們將給定的陣列 a 分成 k 個相鄰的非空子陣列 我們的分數由每個子陣列內的平均值的總和構成。計算我們所能得到的最大分數是多少。注意我們必須使用 a 陣列中的每乙個數進行分組,並且分數不一定需要是整數。示例 輸入 a 9,1,2,3,9 k 3 輸出 20 解釋 a 的最優分組是 9 1,2,3 ...

LeetCode 最大平均值和的分組(動態規劃)

我們將給定的陣列 a 分成 k 個相鄰的非空子陣列 我們的分數由每個子陣列內的平均值的總和構成。計算我們所能得到的最大分數是多少。注意我們必須使用 a 陣列中的每乙個數進行分組,並且分數不一定需要是整數。示例 輸入 a 9,1,2,3,9 k 3 輸出 20 解釋 a 的最優分組是 9 1,2,3 ...

LeetCode 643 子陣列最大平均數 I

給定n個整數,找出平均數最大且長度為k的連續子陣列,並輸出該最大平均數。示例 1 輸入 1,12,5,6,50,3 k 4 輸出 12.75 解釋 最大平均數 12 5 6 50 4 51 4 12.75 注意 1 k n 30,000。所給資料範圍 10,000,10,000 思路 先求前k個數的...