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

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

解题思路

需要两个栈, 一个保存数据, 一个保存每一次将元素压入栈后的当前最小值
压入元素时, dataStack正常压入, minStack则压入要压入的元素和minStack栈顶之间的最小值Math.min(x, minStack.element())
弹出元素则两个栈都正常弹出
得到栈的最小值则只需要查看minStack的栈顶元素即可

代码

class MinStack {
    Deque dataStack;
    Deque minStack;

    public MinStack() {
        dataStack = new ArrayDeque<>();
        minStack = new ArrayDeque<>();
    }

    public void push(int x) {
        dataStack.push(x);
        if (minStack.isEmpty()) {
            minStack.push(x);
        } else {
            minStack.push(Math.min(x, minStack.element()));
        }
    }

    public void pop() {
        if (!dataStack.isEmpty()) {
            dataStack.pop();
            minStack.pop();
        }
    }

    public int top() {
        if (!dataStack.isEmpty()) {
            return dataStack.element();
        } else {
            return 0;
        }
    }

    public int min() {
        if (!minStack.isEmpty()) {
            return minStack.element();
        } else {
            return 0;
        }
    }
}

你可能感兴趣的:(剑指Offer.30 包含min函数的栈)