leetcode-155. 最小栈

一、题目描述

题目描述

二、思路

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

三、代码

class MinStack {
public:
    stack<int> st;  // 用来存储元素
    stack<int> 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();
 */

四、提交结果

提交结果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容