设计一个支持 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 次


    1. class MinStack {
    2. //同时保存值, 和当时得最小值
    3. Deque<int[]> stk = new LinkedList<>();
    4. public MinStack() {
    5. }
    6. public void push(int val) {
    7. if (stk.size() == 0) stk.addLast(new int[]{val, val});
    8. else stk.addLast(new int[]{val, Math.min(stk.peekLast()[1], val)});
    9. }
    10. public void pop() {
    11. stk.pollLast();
    12. }
    13. public int top() {
    14. return stk.peekLast()[0];
    15. }
    16. public int getMin() {
    17. return stk.peekLast()[1];
    18. }
    19. }
    20. /**
    21. * Your MinStack object will be instantiated and called as such:
    22. * MinStack obj = new MinStack();
    23. * obj.push(val);
    24. * obj.pop();
    25. * int param_3 = obj.top();
    26. * int param_4 = obj.getMin();
    27. */