[C++题目]牛客 JZ31 栈的压入、弹出序列

思路:题目给出了两个整型元素的顺序表,一个是入栈顺序,一个是出栈顺序,我们创建一个栈,通过某种算法来模拟入栈和出栈的过程,如果创建的栈中最后不存在元素,说明出栈顺序是正确的。

class Solution 
{
public:
    bool IsPopOrder(vector<int> pushV, vector<int> popV) 
    {
        //创建一个新的栈
        stack<int> ret;

        //标识出栈到出栈序列的第几个元素
        size_t popCur = 0;

        //记录顺序表的大小,避免后续重复调用size()函数。
        size_t pushSize = pushV.size();
        size_t popSize = popV.size();

        //将入栈序列依次入栈到ret中
        for(int i=0; i<pushSize; ++i)
        {
            ret.push(pushV[i]);

            //如果ret栈顶的元素和popV当前遍历到的元素一样,ret就出栈,再依次比较popV的下一个元素.
            //对于迭代遍历的情况,需要考虑边界条件(取栈顶要求栈中有元素,访问数组元素要求在数组范围内)。
            while(!ret.empty() && popCur < popSize && ret.top() == popV[popCur])
            {
                ret.pop();
                popCur++;
            }
        }
        return ret.empty();
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值