剑指 Offer 30. 包含min函数的栈(简单)

孜孜不倦fly / 2023-07-31 / 原文

题目:

class MinStack {
public:
    stack<int> st1;           //维护原栈
    stack<int> st2;           //维护最小值的栈
    /** initialize your data structure here. */
    MinStack() {
        
    }
    
    void push(int x) {
        st1.push(x);
        if(st2.empty()||x<st2.top()){
            st2.push(x);
        }else st2.push(st2.top());       //如果插入元素大于st2的栈顶,那么再插入一个栈顶元素:1.确保st1和st2能同步pop  2.确保栈顶位置始终为最小值
    }
    
    void pop() {   
        st1.pop();
        st2.pop();              //要考虑有可能是最小元素被pop了
    }
    
    int top() {
        return st1.top();
    }
    
    int min() {
        return st2.top();
    }
};