155. 最小栈

发布于:2025-02-11 ⋅ 阅读:(33) ⋅ 点赞:(0)

题目来源:leetcode155. 最小栈 - 力扣(LeetCode)

题目:如下

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

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。

答案:如下图

class MinStack {
public:

    void push(int val) {
        st.push(val);
        if(minst.empty()||val<=minst.top())
        {
            minst.push(val);
        }
    }
    
    void pop() {
        if(st.top()==minst.top())
        {
            minst.pop();
        } 

        st.pop();
    }
    
    int top() {
        return st.top();
    }
    
    int getMin() {
        return minst.top();
    }

    stack<int> st;
    stack<int> minst;


};

解析:

(1)建立栈

我们可以设计两个栈,一个用于储存所有的值st栈,另一个储存比st栈的第一个进栈的数小于等于的数

stack<int> st;
stack<int> minst;

(2)push接口

使用push接口进栈,st将val全部进栈,开始时,st和minst栈都没有数据,当第一个数进栈st的时候,自然就是最小数,我们就将其拉取进去minst栈中。

min栈中最后一个数作为衡量目前最小数的标准,当比相等或者比其小的时候就入栈

    void push(int val) {
        st.push(val);
        if(minst.empty()||val<=minst.top())
        {
            minst.push(val);
        }
    }

(3)pop接口

先判断,当minst的中的最小值对应st中的top的要被出栈的值的时候就对应的把minst中的最小值出掉

void pop() {
        if(st.top()==minst.top())
        {
            minst.pop();
        } 

        st.pop();
    }

(4)top()接口

返回当前st栈顶的值

int top() {
return st.top();

}

(5)getMin() 接口

由于minst栈中储存的是按次序排序的最小值,返会其栈顶的值即可

int getMin() {
return minst.top();

}

到这里我们讲解完毕

如果对您有帮助的话点一个免费的赞和收藏叭!

由于作者水平不足,如有任何错误,请读者在评论区交流!


网站公告

今日签到

点亮在社区的每一天
去签到