Retour aux défis
Moyen 0 résolus 0 % de réussite

Pile avec minimum

Construisez une pile qui indique instantanément son plus petit élément après chaque push ou pop.

Ce que vous allez apprendre

  • Mémoriser le minimum à chaque push
  • Répondre aux requêtes min en temps constant
  • Gérer sans risque un pop sur une pile vide

Problème

Une Stack<T> générique fonctionne pour n'importe quel type. Ici, vous allez étendre l'idée : une pile d'entiers qui peut aussi indiquer son minimum en temps constant.

Traitez les opérations dans l'ordre :

  • push <x> : empile x.
  • pop : supprime la valeur du sommet (ignoré lorsque la pile est vide).
  • min : indique la plus petite valeur actuellement dans la pile, ou -1 si elle est vide.

Implémentez min_stack_operations(operations).

Entrée

operations: Les opérations.

Sortie

Retournez les réponses des opérations min, dans l'ordre.

Contraintes

1 ≤ nombre d'opérations ≤ 200,000

0 ≤ x ≤ 10^9

Exemples

Exemple 1
Entrée :
operations = ["push 5", "push 3", "min", "pop", "min"]

Sortie attendue :
expected = [3, 5]
Entrée :
std::vector<std::string> operations = {"push 5", "push 3", "min", "pop", "min"};

Sortie attendue :
std::vector<long long> expected = {3, 5};
Entrée :
string[] operations = new string[] {"push 5", "push 3", "min", "pop", "min"};

Sortie attendue :
long[] expected = new long[] {3, 5};

Explication

Avec 5 et 3 sur la pile, le minimum est 3. Après avoir retiré 3, il ne reste que 5 : [3, 5].

Exemple 2
Entrée :
operations = ["min", "pop", "push 7", "min"]

Sortie attendue :
expected = [-1, 7]
Entrée :
std::vector<std::string> operations = {"min", "pop", "push 7", "min"};

Sortie attendue :
std::vector<long long> expected = {-1, 7};
Entrée :
string[] operations = new string[] {"min", "pop", "push 7", "min"};

Sortie attendue :
long[] expected = new long[] {-1, 7};

Explication

La pile vide renvoie -1 et le pop est ignoré ; puis le minimum est 7 : [-1, 7].

Comment l'aborder

Essayez d'abord seul, puis ouvrez les indices un par un.

Indice 1

À côté de chaque valeur, stockez le minimum de la pile à ce moment-là.

Indice 2

Le minimum actuel est alors simplement le sommet de cette seconde pile.

Indice 3

Ignorez pop sur une pile vide et répondez -1 à min quand elle est vide.

Complexité attendue

temps O(nombre d'opérations), espace supplémentaire O(nombre d'opérations)

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.