Medium 0 solved 0% acceptance

Min Stack

Build a stack that reports its smallest element instantly after any push or pop.

What you'll learn

  • Track the minimum alongside each push
  • Answer min queries in constant time
  • Handle pops on an empty stack safely

Problem

A generic Stack<T> works for any type. Here you extend the idea: a stack of integers that can also report its minimum in constant time.

Process the operations in order:

  • push <x>: push x.
  • pop: remove the top value (ignored when the stack is empty).
  • min: report the smallest value currently in the stack, or -1 if it is empty.

Implement min_stack_operations(operations).

Input

operations: The operations.

Output

Return the answers of the min operations, in order.

Constraints

1 ≤ number of operations ≤ 200,000

0 ≤ x ≤ 10^9

Examples

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

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

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

Expected output:
long[] expected = new long[] {3, 5};

Explanation

With 5 and 3 on the stack the minimum is 3. After popping 3, only 5 is left: [3, 5].

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

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

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

Expected output:
long[] expected = new long[] {-1, 7};

Explanation

The empty stack reports -1 and the pop is ignored; then the minimum is 7: [-1, 7].

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

Store, next to each value, the minimum of the stack at that point.

Hint 2

The current minimum is then simply the top of that second stack.

Hint 3

Ignore pop on an empty stack, and answer -1 for min when it is empty.

Expected complexity

O(number of operations) time, O(number of operations) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.