leetcode-155. 最小栈

一、题目描述

题目描述

二、思路

用双栈解决。一个栈st正常存取数据,另一个栈minst用以存当前最小元素(两个栈元素个数始终一样)。
push一个数时进行判断,若该数比当前最小元素还小,那么将其存入minst栈顶,否则将当前最小元素再次存入minst栈顶;
pop操作需要两个栈一起pop()。

三、代码

class MinStack {
public:
    stack st;  // 用来存储元素
    stack minst;  // 存储当前最小元素
    /** initialize your data structure here. */
    MinStack() {
        
    }
    
    void push(int x) {
        st.push(x);
        if(minst.size() == 0){
            minst.push(x);  // 第一个元素,直接存入
        }else{
            int cur_min = minst.top();  // 当前最小元素
            if(x < cur_min){  // x比当前元素还小
                minst.push(x);  // 将当前最小元素x压入栈顶
            }else{
                minst.push(cur_min);  // 当前最小元素依然不变
            }
        }
    }
    
    void pop() {
        st.pop();
        minst.pop();
    }
    
    int top() {
        return st.top();
    }
    
    int getMin() {
        return minst.top();
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(x);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */

四、提交结果

提交结果

你可能感兴趣的:(leetcode-155. 最小栈)