Rumah >pembangunan bahagian belakang >tutorial php >. Semua Struktur Data O`one
432. Semua Struktur Data O`one
Kesukaran: Sukar
Topik: Jadual Hash, Senarai Terpaut, Reka Bentuk, Senarai Berganda Berkaitan
Reka bentuk struktur data untuk menyimpan kiraan rentetan dengan keupayaan untuk mengembalikan rentetan dengan kiraan minimum dan maksimum.
Melaksanakan kelas AllOne:
Perhatikan bahawa setiap fungsi mesti dijalankan dalam O(1) purata kerumitan masa.
Contoh 1:
Kekangan:
Penyelesaian:
Kami perlu melaksanakan struktur data yang membenarkan penambahan, pengurangan dan pengambilan kunci dengan kiraan minimum dan maksimum dalam masa tetap (O(1)).
Jadual Hash (untuk Kiraan Rentetan):
Kami memerlukan jadual cincang (kiraan) yang memetakan setiap rentetan (kunci) kepada kiraannya. Ini membenarkan akses O(1) apabila menambah atau mengurangkan kiraan.
Senarai Berganda Berpaut (untuk Kiraan):
Untuk menjejaki kiraan minimum dan maksimum, kita boleh menggunakan senarai terpaut dua kali di mana setiap nod mewakili kiraan unik. Nod akan menyimpan semua rentetan dengan kiraan itu dalam satu set. Senarai terpaut akan membantu dalam mendapatkan kiraan min dan maks dalam masa yang tetap dengan menjejaki nod kepala (min) dan ekor (maks).
Dua Peta Hash:
inc(kunci):
dec(kunci):
getMaxKey() dan getMinKey():
Mari laksanakan penyelesaian ini dalam PHP: 432. Semua Struktur Data O`one
<?php class Node { /** * @var */ public $count; /** * @var array */ public $keys; /** * @var null */ public $prev; /** * @var null */ public $next; /** * @param $count */ public function __construct($count) { ... ... ... /** * go to ./solution.php */ } } class AllOne { /** * @var array */ private $key_to_node; /** * @var array */ private $counts; /** * @var Node */ private $head; /** * @var Node */ private $tail; /** */ function __construct() { ... ... ... /** * go to ./solution.php */ } /** * Insert a new node after a given node * * @param $newNode * @param $prevNode * @return void */ private function insertAfter($newNode, $prevNode) { ... ... ... /** * go to ./solution.php */ } /** * Remove a node from the linked list * * @param $node * @return void */ private function removeNode($node) { ... ... ... /** * go to ./solution.php */ } /** * Increments the count of a key * * @param String $key * @return NULL */ function inc($key) { ... ... ... /** * go to ./solution.php */ } /** * Decrements the count of a key * * @param String $key * @return NULL */ function dec($key) { ... ... ... /** * go to ./solution.php */ } /** * Returns one of the keys with the maximum count * * @return String */ function getMaxKey() { ... ... ... /** * go to ./solution.php */ } /** * Returns one of the keys with the minimum count * * @return String */ function getMinKey() { ... ... ... /** * go to ./solution.php */ } } /** * Your AllOne object will be instantiated and called as such: * $obj = AllOne(); * $obj->inc($key); * $obj->dec($key); * $ret_3 = $obj->getMaxKey(); * $ret_4 = $obj->getMinKey(); */ // Example usage $allOne = new AllOne(); $allOne->inc("hello"); $allOne->inc("hello"); echo $allOne->getMaxKey(); // returns "hello" echo $allOne->getMinKey(); // returns "hello" $allOne->inc("leet"); echo $allOne->getMaxKey(); // returns "hello" echo $allOne->getMinKey(); // returns "leet" ?>
Struktur Data:
Kaedah:
Beri tahu saya jika anda memerlukan penjelasan lanjut!
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 . Semua Struktur Data O`one. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!