【practise】栈的压入和弹出序列

关于我:

睡觉待开机:个人主页

个人专栏: 《优选算法》《C语言》《CPP》 生活的理想,就是为了理想的生活! 作者留言

PDF版免费提供 :倘若有需要,想拿我写的博客进行学习和交流,可以私信我将免费提供PDF版。
留下你的建议 :倘若你发现本文中的内容和配图有任何错误或改进建议,请直接评论或者私信。
倡导提问与交流 :关于本文任何不明之处,请及时评论和私信,看到即回复。


参考目录


1.前言

我们知道对于同一入栈的队列,在出栈时候也会因为出栈的时机不同从而造成不同的出栈顺序,那该如何判断一串出栈队列属于该入栈队列的某一出栈顺序呢???

下面我们来介绍题目------栈的压入和弹出序列。

所以说,对于同一入栈序列,不同的出栈时间也会影响出栈结果。

2.题目简介

题目链接:LINK

题意很简单,给我们一组入栈和出栈序列,检验是否匹配。

3.题解思路

思路很简单,我们模拟入栈出栈次序,看是否匹配。

  • 先把入栈序列入栈
  • 栈顶元素和出栈序列是否匹配
    • 匹配,持续出数据,直到不匹配或者栈为空
    • 不匹配,继续第一步...

当入栈序列走完了,我们就可以判断结果了。

  • 如果栈不为空,则不匹配。
  • 如果栈为空,则匹配。

4.参考代码

cpp 复制代码
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pushV int整型vector 
     * @param popV int整型vector 
     * @return bool布尔型
     */
    bool IsPopOrder(vector<int>& pushV, vector<int>& popV) 
    {
        // write code here
        int pushi = 0;
        int popi = 0;
        stack<int> st;
        while(pushi != pushV.size())
        {
            //数据入栈
            st.push(pushV[pushi]);
            //判断是否匹配,出栈(栈必须非空才可以top)
            while(!st.empty() && st.top() == popV[popi])
            {
                //匹配,我们就出栈,popi++
                st.pop();
                popi++;
            }
            
            pushi++;
        }
        
        //如果st为空,则证明匹配,如果不为空,则证明不匹配。
        return st.empty();
    }
};

好的,如果本篇文章对你有帮助,不妨点个赞~谢谢。

相关推荐
m0_738120724 分钟前
CTFshow系列——PHP特性Web93-96
开发语言·安全·web安全·php·ctfshow
m0_5704664115 分钟前
代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
java·开发语言·算法
程序喵大人15 分钟前
分享个C++线程池的实现源码
开发语言·c++·线程池
不会吃萝卜的兔子40 分钟前
go webrtc - 1 go基本概念
开发语言·golang·webrtc
要做朋鱼燕1 小时前
【C++】 priority_queue 容器模拟实现解析
开发语言·c++·笔记·职场和发展
jiaway1 小时前
【C语言】第四课 指针与内存管理
c语言·开发语言·算法
励志不掉头发的内向程序员1 小时前
C++进阶——继承 (1)
开发语言·c++·学习
中国胖子风清扬3 小时前
Rust 序列化技术全解析:从基础到实战
开发语言·c++·spring boot·vscode·后端·中间件·rust
我就是全世界3 小时前
【存储选型终极指南】RustFS vs MinIO:5大维度深度对决,95%技术团队的选择秘密!
开发语言·分布式·rust·存储
南莺莺3 小时前
假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法来判别,表达式中的括号是否配对,以字符“\0“作为算术表达式的结束符
c语言·数据结构·算法·