432。所有 O`one 数据结构
难度:难
主题:哈希表、链表、设计、双向链表
设计一个数据结构来存储字符串的计数,并能够返回具有最小和最大计数的字符串。
实现 AllOne 类:
注意每个函数必须以 O(1) 平均时间复杂度运行。
示例1:
约束:
解决方案:
我们需要实现一个数据结构,允许在恒定时间 (O(1)) 内递增、递减和检索具有最小和最大计数的键。
哈希表(用于字符串计数):
我们需要一个哈希表(计数)将每个字符串(键)映射到其计数。这允许在递增或递减计数时进行 O(1) 访问。
双向链表(用于计数):
为了跟踪最小和最大计数,我们可以使用双向链表,其中每个节点代表一个唯一的计数。该节点会将具有该计数的所有字符串存储在一个集合中。链表将有助于通过跟踪头(最小)和尾(最大)节点来在恒定时间内检索最小和最大计数。
两个哈希映射:
inc(key):
dec(key):
getMaxKey() 和 getMinKey():
让我们用 PHP 实现这个解决方案:432。所有 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" ?>
数据结构:
方法:
如果您需要进一步说明,请告诉我!
联系链接
如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!
如果您想要更多类似的有用内容,请随时关注我:
以上是。所有 O`one 数据结构的详细内容。更多信息请关注PHP中文网其他相关文章!