leetcode_剑指 Offer 30. 包含min函数的栈_剑指 Offer 31. 栈的压入、弹出序列

剑指 Offer 30. 包含min函数的栈

题目

在这里插入图片描述

代码

class MinStack {
public:
    /** initialize your data structure here. */
    //注意此处定义栈
    stack<int> stk;
    //增加一个辅助栈,思考何时将何数压入辅助栈中
    stack<int> stkhelp;
    MinStack() {
    }
    void push(int x) {
        stk.push(x);
        //如果辅助栈为空,该值就是最小值,直接压入
        if(stkhelp.empty()) {
            stkhelp.push(x);
        }else {
            //如果x大于辅助栈栈顶元素,再压入一次当前最小值(即辅助栈栈顶值)
            if(x > stkhelp.top()) {
                stkhelp.push(stkhelp.top());
            }else {
                stkhelp.push(x);
            }
        }
    }
    
    void pop() {
        int value = stk.top();
        stk.pop();
        stkhelp.pop();
    }
    
    int top() {
        return stk.top();
    }
    
    int min() {
        return stkhelp.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->min();
 */

剑指 Offer 31.剑指 Offer 31. 栈的压入、弹出序列

题目

在这里插入图片描述

代码

class Solution {
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
        //剑指Offer的思路:如果弹出序列的下一个数字不是栈顶元素,那么在剩下的压入序列中找
        //找一个压一个入栈,直到压入序列到末尾都没有找到,那么就返回false
        //这里感觉是换了个判断的方向,遍历pushed序列入栈,如popped序列中当前数字等于栈顶元素,弹出  
        //栈顶元素,popped向下遍历,pushed压入序列操作完成后,如果此时栈为空,那么返回true
        stack<int>stk;
        int sz1 = pushed.size();
        int sz2 = popped.size();
        int i = 0;
        for(auto a:pushed) {
            stk.push(a);
            while(!stk.empty() && stk.top() == popped[i]) {
                stk.pop();
                i++;
            }
        }
        if(stk.empty()) {
            return true;
        }
        return false;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值