Maison > Article > développement back-end > . Structure de données All O`one
432. Structure de données All O`one
Difficulté : Difficile
Sujets : Table de hachage, liste chaînée, conception, liste doublement chaînée
Concevez une structure de données pour stocker le nombre de chaînes avec la possibilité de renvoyer les chaînes avec des nombres minimum et maximum.
Implémentez la classe AllOne :
Notez que chaque fonction doit s'exécuter avec une complexité temporelle moyenne O(1).
Exemple 1 :
Contraintes :
Solution :
Nous devons implémenter une structure de données qui permet d'incrémenter, de décrémenter et de récupérer des clés avec le nombre minimum et maximum en temps constant (O(1)).
Table de hachage (pour le nombre de chaînes) :
Nous avons besoin d'une table de hachage (comptes) qui mappe chaque chaîne (clé) à son nombre. Cela permet un accès O(1) lors de l'incrémentation ou de la décrémentation du nombre.
Liste doublement liée (pour les comptes) :
Pour garder une trace des décomptes minimum et maximum, nous pouvons utiliser une liste doublement chaînée où chaque nœud représente un décompte unique. Le nœud stockera toutes les chaînes avec ce nombre dans un ensemble. La liste chaînée aidera à récupérer les comptes min et max en temps constant en gardant une trace des nœuds de tête (min) et de queue (max).
Deux cartes de hachage :
inc(clé) :
déc(clé) :
getMaxKey() et getMinKey() :
Implémentons cette solution en PHP : 432. Structure de données All O`one
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" ?>Explication:
Structure des données :
- key_to_node : mappe chaque clé au nœud correspondant dans la liste doublement liée.
- counts : mappe chaque compte à son nœud correspondant dans la liste doublement chaînée.
- head and tail : nœuds factices de tête et de queue pour une manipulation plus facile de la liste doublement chaînée.
Méthodes :
- 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:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!