Home >Backend Development >PHP Tutorial >. All O`one Data Structure
432. All O`one Data Structure
Difficulty: Hard
Topics: Hash Table, Linked List, Design, Doubly-Linked List
Design a data structure to store the strings' count with the ability to return the strings with minimum and maximum counts.
Implement the AllOne class:
Note that each function must run in O(1) average time complexity.
Example 1:
Constraints:
Solution:
We need to implement a data structure that allows incrementing, decrementing, and retrieving keys with the minimum and maximum counts in constant time (O(1)).
Hash Table (for String Count):
We need a hash table (counts) that maps each string (key) to its count. This allows for O(1) access when incrementing or decrementing the count.
Doubly Linked List (for Counts):
To keep track of the minimum and maximum counts, we can use a doubly linked list where each node represents a unique count. The node will store all strings with that count in a set. The linked list will help in retrieving the min and max counts in constant time by keeping track of the head (min) and tail (max) nodes.
Two Hash Maps:
inc(key):
dec(key):
getMaxKey() and getMinKey():
Let's implement this solution in PHP: 432. All O`one Data Structure
<?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" ?>
Data Structure:
Methods:
Let me know if you need further clarifications!
Contact Links
If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks ?. Your support would mean a lot to me!
If you want more helpful content like this, feel free to follow me:
The above is the detailed content of . All O`one Data Structure. For more information, please follow other related articles on the PHP Chinese website!