2097. 유효한 쌍 배열
난이도:어려움
주제: 깊이 우선 탐색, 그래프, 오일러 회로
쌍[i] = [starti, endi]인 0-인덱스 2D 정수 배열 쌍이 제공됩니다. 쌍의 배열은 모든 인덱스 i에 대해 1 <= i < pair.length, 끝i-1 == 시작i.
모든 유효한 쌍 배열을 반환합니다.
참고: 유효한 쌍 배열이 존재하도록 입력이 생성됩니다.
예 1:
1 <= 쌍.길이 <= 10
이것을 그래프 문제로 변환해 주실 수 있나요?
그래프 이론에서는 오일러 경로 문제로 접근할 수 있습니다. 이 경우 쌍은 간선으로 처리될 수 있으며 쌍 내의 값(시작 및 끝)은 노드로 처리될 수 있습니다. 모든 모서리를 정확히 한 번씩 사용하는 경로인 오일러 경로를 찾아야 하며, 한 모서리의 끝은 다음 모서리의 시작과 일치해야 합니다. 이 솔루션을 PHP로 구현해 보겠습니다: 2097. 유효한 쌍 배열 이 접근 방식은 유향 그래프에서 문제를 오일러 경로 문제로 처리하여 유효한 쌍 배열을 효율적으로 찾습니다. 연락처 링크 이 시리즈가 도움이 되었다면 GitHub에서 저장소에 별표를 표시하거나 즐겨찾는 소셜 네트워크에서 게시물을 공유해 보세요. 여러분의 지원은 저에게 큰 의미가 될 것입니다! 이렇게 더 유용한 콘텐츠를 원하시면 저를 팔로우해주세요. 위 내용은 유효한 쌍 배열의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
주요 단계:
계획:
<?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]]
?>
</p>
<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>Hierholzer의 알고리즘</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]]
?>
시간 복잡도: