Torna alle sfide
Media 0 risolte 0% di accettazione

Stack con minimo

Costruisci uno stack che restituisce istantaneamente il suo elemento minimo dopo ogni push o pop.

Cosa imparerai

  • Memorizzare il minimo a ogni push
  • Rispondere alle richieste min in tempo costante
  • Gestire in sicurezza un pop su uno stack vuoto

Problema

Uno Stack<T> generico funziona per qualsiasi tipo. Qui estendi l'idea: uno stack di interi che può anche restituire il suo minimo in tempo costante.

Elabora le operazioni in ordine:

  • push <x>: aggiungi x in cima allo stack.
  • pop: rimuovi il valore in cima (ignorato quando lo stack è vuoto).
  • min: restituisci il valore più piccolo attualmente nello stack, oppure -1 se è vuoto.

Implementa min_stack_operations(operations).

Input

operations: Le operazioni.

Output

Restituisci le risposte delle operazioni min, nell'ordine.

Vincoli

1 ≤ numero di operazioni ≤ 200,000

0 ≤ x ≤ 10^9

Esempi

Esempio 1
Input:
operations = ["push 5", "push 3", "min", "pop", "min"]

Output atteso:
expected = [3, 5]
Input:
std::vector<std::string> operations = {"push 5", "push 3", "min", "pop", "min"};

Output atteso:
std::vector<long long> expected = {3, 5};
Input:
string[] operations = new string[] {"push 5", "push 3", "min", "pop", "min"};

Output atteso:
long[] expected = new long[] {3, 5};

Spiegazione

Con 5 e 3 nello stack il minimo è 3. Dopo aver rimosso 3, resta solo 5: [3, 5].

Esempio 2
Input:
operations = ["min", "pop", "push 7", "min"]

Output atteso:
expected = [-1, 7]
Input:
std::vector<std::string> operations = {"min", "pop", "push 7", "min"};

Output atteso:
std::vector<long long> expected = {-1, 7};
Input:
string[] operations = new string[] {"min", "pop", "push 7", "min"};

Output atteso:
long[] expected = new long[] {-1, 7};

Spiegazione

Lo stack vuoto restituisce -1 e il pop viene ignorato; poi il minimo è 7: [-1, 7].

Come affrontarlo

Prova prima da solo, poi apri un suggerimento alla volta.

Suggerimento 1

Accanto a ogni valore, salva il minimo dello stack in quel momento.

Suggerimento 2

Il minimo attuale è allora semplicemente la cima di questo secondo stack.

Suggerimento 3

Ignora pop sullo stack vuoto e rispondi -1 a min quando è vuoto.

Complessità attesa

tempo O(numero di operazioni), spazio aggiuntivo O(numero di operazioni)

Riferimenti

Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.