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

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

WebStorm Mac版
便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。
