ホームページ >バックエンド開発 >PHPチュートリアル >ペアの有効な配置
2097年。有効なペアの配置
難易度: 難しい
トピック: 深さ優先探索、グラフ、オイラー回路
0 インデックスの 2D 整数配列ペアが与えられます。ここで、pairs[i] = [starti, endi]。すべてのインデックス i について、1 有効です。ペア.長さ、endi-1 == starti.
があります。任意の ペアの有効な配置を返します。
注: 入力は、有効なペアの配置が存在するように生成されます。
例 1:
例 2:
例 3:
制約:
ヒント:
解決策:
グラフ理論におけるオイラー経路問題としてアプローチできます。この場合、ペアはエッジとして扱うことができ、ペア内の値 (開始と終了) をノードとして扱うことができます。オイラー パスを見つける必要があります。これは、すべてのエッジを 1 回だけ使用するパスであり、1 つのエッジの終わりは次のエッジの始まりと一致する必要があります。
このソリューションを PHP で実装してみましょう: 2097。ペアの有効な配置
<?php /** * @param Integer[][] $pairs * @return Integer[][] */ function validArrangement($pairs) { ... ... ... /** * go to ./solution.php */ } // Example usage: $pairs1 = [[5, 1], [4, 5], [11, 9], [9, 4]]; $pairs2 = [[1, 3], [3, 2], [2, 1]]; $pairs3 = [[1, 2], [1, 3], [2, 1]]; print_r(validArrangement($pairs1)); // Output: [[11, 9], [9, 4], [4, 5], [5, 1]] print_r(validArrangement($pairs2)); // Output: [[1, 3], [3, 2], [2, 1]] print_r(validArrangement($pairs3)); // Output: [[1, 2], [2, 1], [1, 3]] ?> <h3> 説明: </h3> <ol> <li> <p><strong>グラフの構築</strong>:</p> <ul> <li>各キーが開始ノード、値が終了ノードのリストである隣接リストを使用してグラフを構築します。</li> <li>また、各ノードの出次数と入次数も維持します。これは、オイラー パスの開始ノードを見つけるのに役立ちます。</li> </ul> </li> <li> <p><strong>開始ノードの検索</strong>:</p> <ul> <li>オイラー パスは、出力次数が入力次数より 1 大きいノードから始まります (そのようなノードが存在する場合)。</li> <li>そのようなノードが存在しない場合、グラフはバランスが取れており、どのノードからでも開始できます。</li> </ul> </li> <li> <p><strong>ヒアホルツァーのアルゴリズム</strong>:</p> <ul> <li>startNode から開始してエッジを繰り返したどり、隣接リストから削除することでエッジを訪問済みとしてマークします。</li> <li>発信エッジがなくなったノードに到達したら、バックトラックして結果を構築します。</li> </ul> </li> <li> <p><strong>結果を返す</strong>:</p> <ul> <li>バックトラックの方法により、結果は逆の順序で構築されるため、最後に逆にします。</li> </ul> </li> </ol> <h3> 出力例: </h3> <pre class="brush:php;toolbar:false"><?php /** * @param Integer[][] $pairs * @return Integer[][] */ function validArrangement($pairs) { ... ... ... /** * go to ./solution.php */ } // Example usage: $pairs1 = [[5, 1], [4, 5], [11, 9], [9, 4]]; $pairs2 = [[1, 3], [3, 2], [2, 1]]; $pairs3 = [[1, 2], [1, 3], [2, 1]]; print_r(validArrangement($pairs1)); // Output: [[11, 9], [9, 4], [4, 5], [5, 1]] print_r(validArrangement($pairs2)); // Output: [[1, 3], [3, 2], [2, 1]] print_r(validArrangement($pairs3)); // Output: [[1, 2], [2, 1], [1, 3]] ?>
このアプローチは、問題を有向グラフのオイラー経路問題として扱うことにより、ペアの有効な配置を効率的に見つけます。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上がペアの有効な配置の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。