leetcode 946 验证栈序列
一、题目描述

二、解题思路
整体思路
可以借助栈来模拟进、出栈过程。如果可以顺利完成整个过程,就说明这个序列是合法的,返回true,反之,就说明这个序列不是合法的,返回false。
具体思路
(1)声明栈st,i指向popped的当前位置,n初始化为popped的size;
(2)遍历pushed数组:
<1>首先,将x进栈;
<2>如果栈不为空且st.top()==popped[i],就执行出栈操作,并使得i++;
(3)如果popped数组可以遍历完,则代表这个序列是一个合法的序列,反之,就是一个不合法的序列,所以只要返回i==n就行;
三、代码实现
class Solution {
public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {stack<int> st;int i=0,n=popped.size();for(auto x:pushed){st.push(x);while(st.size()&&st.top()==popped[i]){st.pop();i++;}}return i==n;}
};
