155. [✔][M]最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
- MinStack()初始化堆栈对象。
- void push(int val)将元素val推入堆栈。
- void pop()删除堆栈顶部的元素。
- int top()获取堆栈顶部的元素。
- int getMin()获取堆栈中的最小元素。
示例 1:
输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]
输出:
[null,null,null,null,-3,null,0,-2]
解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.
提示:
- -231 <= val <= 231 - 1
- pop、- top和- getMin操作总是在 非空栈 上调用
- push,- pop,- top, and- getMin最多被调用- 3 * 104次
题解:
和stack同步维护一个最小值的栈
// @lc code=start
class MinStack {
    stack: number[];
    min: number[];
    constructor() {
        this.stack = [];
        this.min = [];
    }
    push(val: number): void {
        this.stack.push(val);
        if (this.min.length === 0 || val < this.min[this.min.length - 1]) {
            this.min.push(val);
        } else {
            this.min.push(this.min[this.min.length - 1]);
        }
    }
    pop(): void {
        this.stack.pop();
        this.min.pop();
    }
    top(): number {
        return this.stack[this.stack.length - 1]
    }
    getMin(): number {
        return this.min[this.min.length - 1]
    }
}
/**
 * Your MinStack object will be instantiated and called as such:
 * var obj = new MinStack()
 * obj.push(val)
 * obj.pop()
 * var param_3 = obj.top()
 * var param_4 = obj.getMin()
 */
// @lc code=end