牛客网---栈的压入,弹出序列

该博客讨论了一种算法问题,即如何通过栈来模拟并验证给定的入栈和出栈序列是否合法。解决方案中提到,通过创建一个栈,并逐个将入栈元素压入栈中,同时检查是否可以依次弹出出栈序列中的元素。当出栈序列遍历完成且栈为空时,说明序列是合法的栈操作序列。
摘要由CSDN通过智能技术生成

牛客网链接: link.
在这里插入图片描述
解题思路:
这道题就是使用一个栈来模拟出栈的可能序列。
明确一点,入栈的pushi肯定会走到空,但是popi是不一定能走到最后的。只要popi走到了最后就说明这是一个合法的序列。

如果pushi和popi位置数据相等,说明入栈之后,马上就出栈了,如果不相等,则可能先入栈了,后面才可能出栈。
在这里插入图片描述

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        size_t pushi = 0,popi = 0;
        //用入栈的方式来模拟出栈的过程
        stack<int> st;
        while(pushi < pushV.size())
        {
            st.push(pushV[pushi]);
            //有可能栈已经为空了,此时你在st.top()可能会直接崩
            while(!st.empty() && st.top() == popV[popi])
            {
                ++popi;
                st.pop();
            }
            ++pushi;
        }
        //说明popi走到了最后
        if(popi == popV.size())
            return true;
        else
            return false;
    }
};

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值