【LeetCode】---剑指Offer 31.栈的弹出压入序列

一、题目描述:

在这里插入图片描述

二、算法原理:

核心思想:
入栈的栈顶元素跟出栈序列进行匹配,入一个匹配一个。注意:结束的标志就是入栈序列走完了。

在这里插入图片描述

在这里插入图片描述

三、代码实现:


class Solution 
{
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pushV int整型vector 
     * @param popV int整型vector 
     * @return bool布尔型
     */
    bool IsPopOrder(vector<int>& pushV, vector<int>& popV) 
    {
        // write code here

        //pushV:入栈序列  popV: 出栈序列
        
        // 1.定义2个移动下标来遍历2个序列 
        int pushi=0,popi=0;
        // 2.创建一个栈来实现匹配
        stack<int> st;

        //(1)整个程序结束的标志:入栈序列走完了!
        while(pushi<pushV.size())
        {
            //(2)先入栈
            st.push(pushV[pushi++]);
            //(3)判断匹配:
            // ①成功:因为可能有持续输出所以用while循环:
            while(!st.empty()&&st.top()==popV[popi])
            {
                popi++;
                st.pop();
            }
            // ②匹配失败:回到(2)继续

        }
        //!!!最终的判定结果:如果入栈序列 进入(st)走完了 并且 为空,必然两者匹配!!!
        // 否则不匹配!
        return st.empty();
    }
};
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为快乐起舞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值