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).
Вход
operations: Операции.
Выход
Верните ответы операций min в порядке их выполнения.
Ограничения
1 ≤ число операций ≤ 200,000
0 ≤ x ≤ 10^9
Примеры
Ввод:
operations = ["push 5", "push 3", "min", "pop", "min"]
Ожидаемый вывод:
expected = [3, 5]
Ввод:
std::vector<std::string> operations = {"push 5", "push 3", "min", "pop", "min"};
Ожидаемый вывод:
std::vector<long long> expected = {3, 5};
Ввод:
string[] operations = new string[] {"push 5", "push 3", "min", "pop", "min"};
Ожидаемый вывод:
long[] expected = new long[] {3, 5};
Пояснение
Когда в стеке 5 и 3, минимум равен 3. После удаления 3 остаётся только 5: [3, 5].
Ввод:
operations = ["min", "pop", "push 7", "min"]
Ожидаемый вывод:
expected = [-1, 7]
Ввод:
std::vector<std::string> operations = {"min", "pop", "push 7", "min"};
Ожидаемый вывод:
std::vector<long long> expected = {-1, 7};
Ввод:
string[] operations = new string[] {"min", "pop", "push 7", "min"};
Ожидаемый вывод:
long[] expected = new long[] {-1, 7};
Пояснение
Пустой стек сообщает -1, pop игнорируется; затем минимум равен 7: [-1, 7].
Как подступиться
Сначала попробуйте сами, затем открывайте подсказки по одной.
Подсказка 1
Рядом с каждым значением храните минимум стека на тот момент.
Подсказка 2
Тогда текущий минимум — это просто вершина второго стека.
Подсказка 3
Игнорируйте pop на пустом стеке и отвечайте -1 на min, когда он пуст.
Ожидаемая сложность
время O(число операций), доп. память O(число операций)
Ссылки
Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.