程序员社区

LeetCode-155-最小栈

LeetCode-155-最小栈

155. 最小栈

难度简单

设计一个支持 pushpoptop 操作,并能在常数时间内检索到最小元素的栈。

  • push(x) —— 将元素 x 推入栈中。
  • pop() —— 删除栈顶的元素。
  • top() —— 获取栈顶元素。
  • getMin() —— 检索栈中的最小元素。

示例:

输入:
["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.

提示:

  • poptopgetMin 操作总是在 非空栈 上调用。

辅助栈(stackMin)和数据栈(stackData)同步

class MinStack {
    private Stack<Integer> stackData;
    private Stack<Integer> stackMin;
    /** initialize your data structure here. */
    public MinStack() {
        this.stackData = new Stack<Integer>();
        this.stackMin = new Stack<Integer>();
    }

    //1、辅助栈和数据栈同步
    //特点:编码简单,不用考虑一些边界情况,就有一点不好:辅助栈可能会存一些“不必要”的元素。
    public void push(int x) {
        stackData.push(x);
        if (!stackMin.isEmpty()) {
            int value = stackMin.peek();
            stackMin.push(value > x ? x : value);
        } else {
            stackMin.push(x);
        }

    }

    public void pop() {
        if (this.stackData.isEmpty()) {
            throw new RuntimeException("Your stack is empty.");
        }
        stackData.pop();
        stackMin.pop();
    }

    public int top() {
        if (this.stackData.isEmpty()) {
            throw new RuntimeException("Your stack is empty.");
        }
        stackMin.peek();
        return stackData.peek();
    }

    public int getMin() {
        if (this.stackMin.isEmpty()) {
            throw new RuntimeException("Your stack is empty.");
        }
        return stackMin.peek();
    }
}
LeetCode-155-最小栈插图
image-20210620114131749
赞(0) 打赏
未经允许不得转载:IDEA激活码 » LeetCode-155-最小栈

一个分享Java & Python知识的社区