设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
发布日期:2021-10-06 02:38:30 浏览次数:15 分类:技术文章

本文共 1097 字,大约阅读时间需要 3 分钟。

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

  • 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.

 

提示:

  • poptop 和 getMin 操作总是在 非空栈 上调用。

 

class MinStack {

    private Stack<Integer> stack;

    private Stack<Integer> minStack;

    /** initialize your data structure here. */

    public MinStack() {

        this.stack = new Stack<>();

        this.minStack = new Stack<>();

    }

    public void push(int x) {

        this.stack.push(x);

        if(this.minStack.isEmpty()){

            this.minStack.push(x);

        }else{

            int min = this.minStack.peek();

            if(min >= x){

                this.minStack.push(x);

            }

        }

 

    }

    public void pop() {

        int x = this.stack.pop();

        int min = this.minStack.peek();

        if(x == min) this.minStack.pop();

    }

    public int top() {

        return this.stack.peek();

    }

    public int getMin() {

        return this.minStack.peek();

    }

}

 

转载地址:https://blog.csdn.net/luxuiary/article/details/105988722 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:验证回文串
下一篇:设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年03月30日 00时16分42秒