一、题目+题目链接
题目链接:
https://www.nowcoder.com/questionTerminal/d77d11405cc7470d82554cb392585106
二、题目分析
本题的题意就是给定两个数组,第一个数组是压栈序列,判断第二个数组是否是该压栈序列对应的弹出序列。
三、解题思路
先开始遍历入栈数组,入栈数组元素入栈,同时对比新入栈的元素(即栈顶元素)与弹出数组对应的(遍历走到的)元素是否相等,如果相等,就弹出栈顶的元素并同时遍历弹出数组,直到栈为空或者栈顶元素和弹出数组对应的元素不相等就停止。再循环回到遍历入栈数组,重复上述步骤,直到遍历完入栈数组。最后判断栈是否为空,如果为空,那证明该弹出数组对应于该入栈数组。
四、解题步骤
入栈序列和出栈序列不对应的情况演示:
入栈序列和出栈序列对应的情况演示:
五、参考代码
class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { int i=0; int j=0; stack<int> st; while(i<pushV.size()) { st.push(pushV[i]); while(!st.empty()&&st.top()==popV[j]) { st.pop(); j++; } i++; } return st.empty(); } };