【Leetcode】155. 最小栈、JZ31 栈的压入、弹出序列

 作者:小卢 

专栏:《Leetcode》

喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》


155. 最小栈 

155. 最小栈

题目描述;

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

实现 MinStack 类:

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

示例:

思路:

利用俩个栈,一个用了正常存储,一个用了存储最小值,遍历正常的栈,如果_st的top小于等于_minst的top,就将这个栈压进去,出栈的话也是类似

代码:

class MinStack {
public:
    MinStack() {

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

    }
    
    int top() {
return _st.top();
    }
    
    int getMin() {
return _minst.top();
    }
    private:
    stack<int>_st;
    stack<int>_minst;
};

 JZ31 栈的压入、弹出序列

栈的压入、弹出序列_牛客题霸_牛客网

 题目描述:

示例:

代码:

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        stack<int>st;
        int pushi=0;
        int popi=0;
        while(pushi<pushV.size())
        {
            st.push(pushV[pushi++]);
            while(!st.empty()&&st.top()==popV[popi])
            {
                st.pop();
                popi++;
            } 
        }
        return popi==popV.size();
    }
};

猜你喜欢

转载自blog.csdn.net/m0_69061857/article/details/130779547