155. Min Stack (Medium) (https://leetcode.com/problems/min-stack/)
Спроектируйте стек, который поддерживает push, pop, top и получение минимального элемента за константное время. Реализуйте класс MinStack: - MinStack() инициализирует объект стека.
- void push(int value) добавляет элемент value на вершину стека.
- void pop() удаляет элемент с вершины стека.
- int top() возвращает элемент на вершине стека.
- int getMin() возвращает минимальный элемент в стеке. Ограничения: - -2^31 <= val <= 2^31 - 1 - Операции pop, top и getMin всегда будут вызываться на непустых стеках.
- Будет сделано не более 3 * 10^4 вызовов push, pop, top и getMin. Вы должны реализовать решение с временной сложностью O(1) для каждой функции.
class MinStack {
private stack: number[] = []
private minStack: number[] = []
constructor() {}
push(val: number): void {
this.stack.push(val)
const currentMin = this.minStack.length === 0 ? Infinity : this.minStack.at(-1)!
this.minStack.push(Math.min(val, currentMin))
}
pop(): void {
this.stack.pop()
this.minStack.pop()
}
top(): number {
return this.stack.at(-1)
}
getMin(): number {
return this.minStack.at(-1)
}
}
// Локальная проверка:
const minStack = new MinStack()
minStack.push(1)
minStack.push(2)
minStack.push(0)
console.log(minStack.getMin())
minStack.pop()
console.log(minStack.top())
console.log(minStack.getMin())Пример 1:
Ввод
["MinStack", "push", 1, "push", 2, "push", 0, "getMin", "pop", "top", "getMin"]
Вывод
[null,null,null,null,0,null,2,1]
Объяснение