当前位置: 首页 > article >正文

【刷题训练】牛客:JZ31 栈的压入、弹出序列

文章目录

  • 一、题目要求
  • 二、解题思路
  • 三、C++代码
  • 四、注意点
  • 五、运行成功

一、题目要求

在这里插入图片描述

二、解题思路

题意解读。本道题给定了两个序列pushVpopV,其中序列pushV是入栈顺序,popV是出栈顺序。问题就是让我们去判断这个popV的顺序是否可能是pushV弹出顺序
我的思路是:
1.创建一个栈st,然后依照pushV的顺序依次压栈,每次压入一个,就去判断压入的这个元素和pushV序列的第一个元素是否相等,如果相等,则st出栈顶元素(st.pop()),继续判断是否和pushV的第二个元素是否相等,依次类推,一直到走完了pushV序列,则说明全部匹配上了。如果在判断时结果不相等,那么就继续依照pushV的顺序压栈,每次压入一个,就去判断压入的这个元素和pushV序列的当前指向元素是否相等…。最终返回结果就是判断pushV序列是否走完。

在这里插入图片描述

三、C++代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pushV int整型vector 
     * @param popV int整型vector 
     * @return bool布尔型
     */
    bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
        // write code here
        stack<int> st;
        int pushL =0,popL =0;
        //先压入一个数,去和popv的第一个元素比较,如果相等,那么st
        //出栈,popL++指向下一位置。如果不相等继续压栈【压入pushV的下一个元素】
        //最后popL指针如果走完了popV,说明全部匹配上了。
        //
        while(pushL<pushV.size())
        {
            st.push(pushV[pushL++]);
            while(!st.empty()&&st.top()==popV[popL])
            {
                st.pop();
                popL++;
            }
        }
        return popL == popV.size();
    }
};

四、注意点

while(!st.empty()&&st.top()==popV[popL])中!st.empty()一定要先执行,也就是写在左边。

五、运行成功

在这里插入图片描述


http://www.kler.cn/a/271242.html

相关文章:

  • 用云服务器构建gpt和stable-diffusion大模型
  • C语言基础之单向链表
  • LabVIEW多表位数字温湿度计图像识别系统
  • 关于数据通信知识的补充——第二篇
  • 【IC设计】Verilog线性序列机点灯案例(三)(小梅哥课程)
  • github起源
  • 数学建模--MATLAB基本使用
  • idea Springboot 组卷管理系统LayUI框架开发mysql数据库web结构java编程计算机网页
  • 部署一个本地的ChatGPT(Ollama)
  • oops-framework框架 之 启动流程(三)
  • JavaWeb笔记 --- 四、HTMlCSS
  • 嵌入式硬件设计(一)|利用 NodeMCU-ESP8266 开发板和继电器结合APP“点灯•blinker”制作Wi-Fi智能开关(附有关硬件详细资料)
  • unity学习(60)——选择角色界面--MapHandler2-MapHandler.cs
  • spring boot集成redis实现共享存储session
  • C语言 内存函数
  • 【C语言】整型提升与算术转换
  • vue3新功能-Teleport
  • cool 中的Midway ----node.js的TypeORM的使用
  • 算法中出现的一些报错及其处理办法
  • 贪心算法(两个实例)