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
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" ?>Explanation:
Data Structure:
- key_to_node: Maps each key to the corresponding node in the doubly linked list.
- counts: Maps each count to its corresponding node in the doubly linked list.
- head and tail: Dummy head and tail nodes for easier manipulation of the doubly linked list.
Methods:
- inc($key): If the key exists, it increments its count and moves it to the appropriate node in the list. If not, it inserts it with count 1.
- dec($key): Decreases the key’s count and either removes it or moves it to the appropriate node.
- getMaxKey(): Returns the key from the node at the tail of the doubly linked list (max count).
- getMinKey(): Returns the key from the node at the head of the doubly linked list (min count).
Complexity:
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!