2940. 앨리스와 밥이 만날 수 있는 건물 찾기
난이도:어려움
주제: 배열, 이진 검색, 스택, 이진 인덱스 트리, 세그먼트 트리, 힙(우선순위 큐), 단조 스택
양의 정수로 구성된 0-인덱스 배열 높이가 제공됩니다. 여기서 heights[i]는 i번째 건물의 높이를 나타냅니다.
어떤 사람이 건물 i에 있으면 i < j 및 heights[i] < 높이[j].
queries[i] = [ai, bi]인 또 다른 배열 쿼리도 제공됩니다. i번째 쿼리에서 Alice는 ai 건물에 있고 Bob은 bi 건물에 있습니다.
ans[i]가 i번째 쿼리에서 Alice와 Bob이 만날 수 있는 가장 왼쪽 건물의 인덱스인 배열 ans를 반환합니다. Alice와 Bob이 쿼리 i에서 공동 건물로 이동할 수 없는 경우 ans[i]를 -1로 설정합니다.
예 1:
예 2:
제약조건:
힌트:
해결책:
문제는 시작 건물과 이동 규칙을 고려하여 앨리스와 밥이 만날 수 있는 가장 왼쪽 건물을 결정해야 합니다. 각 쿼리에는 건물 높이를 기준으로 만남의 장소를 찾는 것이 포함됩니다. 이는 이동에 대한 제약과 효율적인 계산의 필요성으로 인해 어려운 작업입니다.
관찰:
단조 스택을 사용한 최적화:
쿼리 정렬:
스택의 이진 검색:
쿼리 전처리:
쿼리 반복:
스택의 이진 검색:
원래 주문 복원:
결과 반환.
이 솔루션을 PHP: 2940으로 구현해 보겠습니다. 앨리스와 밥이 만날 수 있는 건물 찾기
<?php /** * @param Integer[] $heights * @param Integer[][] $queries * @return Integer[] */ function leftmostBuildingQueries($heights, $queries) { ... ... ... /** * go to ./solution.php */ } /** * @param $queries * @return array */ private function getIndexedQueries($queries) { ... ... ... /** * go to ./solution.php */ } /** * @param $stack * @param $a * @param $heights * @return mixed|null */ private function findUpperBound($stack, $a, $heights) { ... ... ... /** * go to ./solution.php */ } class IndexedQuery { public $queryIndex; public $a; // Alice's index public $b; // Bob's index /** * @param $queryIndex * @param $a * @param $b */ public function __construct($queryIndex, $a, $b) { $this->queryIndex = $queryIndex; $this->a = $a; $this->b = $b; } } // Test the function $heights = [6, 4, 8, 5, 2, 7]; $queries = [[0, 1], [0, 3], [2, 4], [3, 4], [2, 2]]; print_r(leftmostBuildingQueries($heights, $queries)); $heights = [5, 3, 8, 2, 6, 1, 4, 6]; $queries = [[0, 7], [3, 5], [5, 2], [3, 0], [1, 6]]; print_r(leftmostBuildingQueries($heights, $queries)); ?>
정렬 쿼리:
단조 스택 구축:
쿼리 처리:
[2, 5, -1, 5, 2]
전체: O(N Q log(Q N)).
입력:
$heights = [6, 4, 8, 5, 2, 7]; $queries = [[0, 1], [0, 3], [2, 4], [3, 4], [2, 2]];
출력:
print_r(findBuilding($heights, $queries)); // [2, 5, -1, 5, 2]
이 접근 방식은 단조 스택과 이진 검색을 활용하여 대규모 제약 조건을 효율적으로 처리합니다. 정확성을 유지하면서 최적의 쿼리 처리를 보장합니다.
연락처 링크
이 시리즈가 도움이 되었다면 GitHub에서 저장소에 별표를 표시하거나 즐겨찾는 소셜 네트워크에서 게시물을 공유해 보세요. 여러분의 지원은 저에게 큰 의미가 될 것입니다!
이렇게 더 유용한 콘텐츠를 원하시면 저를 팔로우해주세요.
위 내용은 앨리스와 밥이 만날 수 있는 건물 찾기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!