ホームページ >バックエンド開発 >PHPチュートリアル >プレイヤーを同じスキルのチームに分ける
2491。プレイヤーを同じスキルのチームに分けます
難易度: 中
トピック: 配列、ハッシュ テーブル、2 つのポインター、ソート
あなたには、長さ n が 偶数 の正の整数配列スキルが与えられます。ここで、skill[i] は i 番目 のプレイヤーのスキルを示します。各チームの合計スキルが 等しくなるように、プレーヤーをサイズ 2 の n / 2 チームに分割します。
チームの相性は、そのチームの選手のスキルの積に等しい。
すべてのチームのケミストリーの合計を返します。各チームの合計スキルが等しくなるようにプレーヤーをチームに分割する方法がない場合は、-1を返します.
例 1:
例 2:
例 3:
制約:
ヒント:
解決策:
提供されたヒントに従い、貪欲なアプローチを使用できます。ソリューションの詳細な内訳は次のとおりです:
スキル配列を並べ替えます
: 並べ替えにより、最も弱いプレーヤー (最小値) と最も強いプレーヤー (最大値) を効率的に組み合わせることができます。有効なペアリングをチェック
: 各チームのスキルの合計は等しい必要があります。並べ替えた後、最小の要素と最大の要素をペアにし、次に 2 番目に小さい要素と 2 番目に大きい要素を組み合わせます。いずれかの時点でペアの合計が以前の合計と異なる場合は、プレーヤーを有効なチームに分割することは不可能であるため、-1 を返す必要があります。化学反応を計算する: 各チームの化学反応は、そのチームの 2 つのスキルの積です。有効な各チームのすべての化学値を合計します。
合計ケミストリーを返します: すべてのチームが同じ合計スキルを持っている場合、チームのケミストリーの合計を返します。
このソリューションを PHP で実装してみましょう: 2491。プレイヤーを同じスキルのチームに分けます
<p><?php<br> /**</p> <ul> <li>@param Integer[] $skill</li> <li>@return Integer <em>/ function dividePlayers($skill) { ... ... ... /</em>* <ul> <li>go to ./solution.php */ } </li> </ul> </li> </ul> <p>// Test cases<br> $skill1 = [3, 2, 5, 1, 3, 4];<br> $skill2 = [3, 4];<br> $skill3 = [1, 1, 2, 3];</p> <p>echo dividePlayers($skill1) . "\n"; // Output: 22<br> echo dividePlayers($skill2) . "\n"; // Output: 12<br> echo dividePlayers($skill3) . "\n"; // Output: -1<br> ?></p>
ソート: 配列スキルは、最小値と最大値を効率的にペアリングできるようにソートされます。
2 つのポインター: 2 つのポインター (先頭から始まる $i と末尾から始まる $j) を使用します。有効なペア (最小値と最大値) ごとに、それらの合計が予想されるteamSkillSumと同じかどうかを確認します。そうしないと、選手をチームに分けることができません。
化学計算: ペアが有効な場合、化学は 2 つの値 ($skill[$i] * $skill[$j]) の積として計算されます。トータルケミストリーにそれを加え続けてください。
エッジケース:
このソリューションは、最大 105 プレイヤーという指定された制約内で機能します。
連絡先リンク
如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!
如果您想要更多类似的有用内容,请随时关注我:
以上がプレイヤーを同じスキルのチームに分けるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。