Rumah >pembangunan bahagian belakang >tutorial php >Cari Bangunan Tempat Alice dan Bob Boleh Bertemu
2940. Cari Bangunan Tempat Alice dan Bob Boleh Bertemu
Kesukaran: Sukar
Topik: Tatasusunan, Carian Perduaan, Tindanan, Pokok Berindeks Perduaan, Pokok Segmen, Timbunan (Baris Gilir Keutamaan), Timbunan Monotonic
Anda diberi ketinggian tatasusunan indeks 0 bagi integer positif, dengan ketinggian[i] mewakili ketinggian bangunan ith.
Jika seseorang berada di dalam bangunan i, mereka boleh berpindah ke mana-mana bangunan lain j jika dan hanya jika i < j dan ketinggian[i] < ketinggian[j].
Anda juga diberi satu lagi pertanyaan tatasusunan di mana pertanyaan[i] = [ai, bi]. Pada pertanyaan ith, Alice sedang membinai manakala Bob sedang membina bi.
Kembalikan tatasusunan dan dengan ans[i] ialah indeks bangunan paling kiri tempat Alice dan Bob boleh bertemu pada pertanyaan ith. Jika Alice dan Bob tidak boleh berpindah ke bangunan biasa pada pertanyaan i, tetapkan ans[i] kepada -1.
Contoh 1:
Contoh 2:
Kekangan:
Petunjuk:
Penyelesaian:
Masalahnya memerlukan penentuan bangunan paling kiri tempat Alice dan Bob boleh bertemu memandangkan bangunan permulaan dan peraturan pergerakan mereka. Setiap pertanyaan melibatkan mencari titik pertemuan berdasarkan ketinggian bangunan. Ini mencabar kerana kekangan pergerakan dan keperluan untuk pengiraan yang cekap.
Pemerhatian:
Pengoptimuman Menggunakan Tindanan Monotonic:
Isih Pertanyaan:
Carian Binari pada Tindanan:
Pertanyaan Praproses:
Lelar Melalui Pertanyaan:
Carian Binari pada Tindanan:
Pulihkan Pesanan Asal:
Keputusan Pulangan.
Mari laksanakan penyelesaian ini dalam PHP: 2940. Cari Bangunan Tempat Alice dan Bob Boleh Bertemu
<?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)); ?>
Isih Pertanyaan:
Bina Tindanan Monotonic:
Pemprosesan Pertanyaan:
[2, 5, -1, 5, 2]
Keseluruhan: O(N Q log (Q N)).
Input:
$heights = [6, 4, 8, 5, 2, 7]; $queries = [[0, 1], [0, 3], [2, 4], [3, 4], [2, 2]];
Output:
print_r(findBuilding($heights, $queries)); // [2, 5, -1, 5, 2]
Pendekatan ini mengendalikan kekangan besar dengan cekap dengan memanfaatkan timbunan monoton dan carian binari. Ia memastikan pemprosesan pertanyaan yang optimum sambil mengekalkan ketepatan.
Pautan Kenalan
Jika anda mendapati siri ini membantu, sila pertimbangkan untuk memberi repositori bintang di GitHub atau berkongsi siaran pada rangkaian sosial kegemaran anda ?. Sokongan anda amat bermakna bagi saya!
Jika anda mahukan kandungan yang lebih berguna seperti ini, sila ikuti saya:
Atas ialah kandungan terperinci Cari Bangunan Tempat Alice dan Bob Boleh Bertemu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!