ホームページ >バックエンド開発 >PHPチュートリアル >最大平均合格率
1792年。最大平均合格率
難易度: 中
トピック: 配列、貪欲、ヒープ (優先キュー)
ある学校には生徒のクラスがあり、各クラスで期末試験があります。 2D 整数配列クラスが与えられます。ここで、classes[i] = [passi, totali]。 i番目のクラスには合計i人の生徒がいますが、合格i人の生徒のみが試験に合格することが事前にわかっています。
整数の extraStudents も与えられます。他にも、割り当てられたクラスの試験に合格することが保証されている優秀な学生がもう 1 人います。あなたは、クラスすべての平均合格率を最大化する方法で、extraStudents の各生徒をクラスに割り当てたいと考えています。
クラスの合格率は、試験に合格するクラスの生徒の数をクラスの生徒の総数で割ったものに等しくなります。 平均合格率は、すべてのクラスの合格率の合計をクラス数で割ったものです。
extraStudents の学生を割り当てた後の、最大の平均合格率を返します。実際の回答から 10 ~ 5 以内の回答が受け入れられます。
例 1:
例 2:
制約:
ヒント:
<🎜>解決策:
最大ヒープ (優先キュー) を使用できます。これは、生徒を追加するときに最もメリットが得られる (合格率の変化を最大化する) クラスを効率的に見つける必要があるためです。
ゲインの計算を理解する:
最大ヒープを使用する:
追加の生徒を反復的に配布する:
最終平均の計算:
このソリューションを PHP で実装してみましょう: 1792。最大平均合格率
説明:
ヒープセットアップ:
- 私たちは最大ヒープ (優先キュー) を使用して、追加の生徒が追加された場合の合格率の潜在的な向上に基づいてクラスに優先順位を付けます。
- PHP では、ヒープに SplPriorityQueue が使用されます。優先順位の値が高いほど、クラスは早く処理されます。
追加生徒の配布:
- 追加の生徒ごとに、ヒープから改善の可能性が最も高いクラスを抽出します。
- そのクラスに生徒を 1 人追加した後、その潜在的な改善を再計算し、ヒープに再挿入します。
最終平均計算:
- すべての追加生徒を分配した後、すべてのクラスの合計合格率を計算し、平均を返します。
精度:
- 計算は浮動小数点演算を使用して実行され、必要に応じて答えが 10^-5 まで正確になることが保証されます。
複雑:
時間計算量:
空間の複雑さ:
この実装により、追加の生徒が効率的に分散され、最大平均合格率が計算されます。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上が最大平均合格率の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。