设计一个具有getMin功能的栈

请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-stack-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


import java.util.Stack;

class MinStack {

    private Stack<Integer> rawStack;

    private Stack<Integer> assistStack;

    /** initialize your data structure here. */
    public MinStack() {

        this.rawStack = new Stack<>();
        this.assistStack = new Stack<>();

    }

    /**
     * 辅助栈顶维护当前最小元素
     * @param x
     */
    public void push(int x) {

        this.rawStack.push(x);

        if (this.assistStack.isEmpty() || this.assistStack.peek() >= x) {
            this.assistStack.push(x);
        }
    }

    public void pop() {

        Integer pop = this.rawStack.pop();

        if (pop.equals(this.assistStack.peek())) {
            this.assistStack.pop();
        }
    }

    public int top() {
        return this.rawStack.peek();
    }

    public int getMin() {
        return this.assistStack.peek();
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(x);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

猜你喜欢

转载自blog.51cto.com/tianyiya/2530927