剑指 Offer 30. 包含min函数的栈

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

示例

剑指 Offer 30. 包含min函数的栈_第1张图片

思路

新开一个辅助栈记录不严格递增序列,栈顶元素始终为栈内的最小值,注意多个相同最小值的情况,都要记录

代码

class MinStack {
     Stack<Integer> st1, st2;

    /** initialize your data structure here. */
    public MinStack() {
        st1 = new Stack<>();
        st2 = new Stack<>();
    }
    
    public void push(int x) {
        st1.add(x);
        if(st2.isEmpty() || st2.peek() >= x) st2.add(x);
    }
    
    public void pop() {
        int top = st1.peek();
        st1.pop();
        if(st2.peek() == top) st2.pop();
    }
    
    public int top() {
        return st1.peek();
    }
    
    public int min() {
        return st2.peek();
    }
}

你可能感兴趣的:(LeetCode,leetcode)