设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。
class MinStack {
    private stack: number[] = [];
    private minStack: number[] = []; // 辅助栈,栈顶始终是当前主栈中的最小值
 
    constructor() {}
 
    push(val: number): void {
        this.stack.push(val);
        // 如果辅助栈为空,或者新值比辅助栈栈顶还小,就压入新值
        // 否则,重复压入当前的最小值,保证两个栈高度一致
        if (this.minStack.length === 0 || val <= this.getMin()) {
            this.minStack.push(val);
        } else {
            this.minStack.push(this.getMin());
        }
    }
 
    pop(): void {
        this.stack.pop();
        this.minStack.pop();
    }
 
    top(): number {
        return this.stack[this.stack.length - 1];
    }
 
    getMin(): number {
        return this.minStack[this.minStack.length - 1];
    }
}