本文主要是介绍【刷题训练】牛客:JZ31 栈的压入、弹出序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、题目要求
- 二、解题思路
- 三、C++代码
- 四、注意点
- 五、运行成功
一、题目要求
二、解题思路
题意解读。本道题给定了两个序列pushV
和popV
,其中序列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 herestack<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()
一定要先执行,也就是写在左边。
五、运行成功
这篇关于【刷题训练】牛客:JZ31 栈的压入、弹出序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!