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): キーが存在する場合、そのカウントをインクリメントし、リスト内の適切なノードに移動します。そうでない場合は、カウント 1 で挿入します。
- dec($key): キーの数を減らし、キーを削除するか、適切なノードに移動します。
- getMaxKey(): 二重リンクリストの末尾のノードからキーを返します (最大数)。
- getMinKey(): 二重リンクリストの先頭のノードからキーを返します (最小カウント)。
複雑:
さらに説明が必要な場合はお知らせください。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上が。オールオワンのデータ構造の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。