
一、题目描述

二、算法原理
思路:使用栈结构来模式出栈和入栈
以 pushed = 1,2,3,4,5,popped = 4,5,3,2,1 为例。
运行流程如下:
压入 1 → 栈:1,栈顶≠4(popped0),不弹栈。
压入 2 → 栈:1,2,栈顶≠4,不弹栈。
压入 3 → 栈:1,2,3,栈顶≠4,不弹栈。
压入 4 → 栈:1,2,3,4,栈顶 = 4,执行弹栈→栈:1,2,3,cur=1。
压入 5 → 栈:1,2,3,5,栈顶 = 5(popped1),执行弹栈→栈:1,2,3,cur=2。
此时 for 循环结束,进入 while 循环持续弹栈: 栈顶 = 3(popped2)→ 弹栈,cur=3,栈:1,2。 栈顶 = 2(popped3)→ 弹栈,cur=4,栈:1。 栈顶 = 1(popped4)→ 弹栈,cur=5,栈:\[\]。
辅助栈为空,返回 true,序列合法。
三、代码实现
cpp
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
vector<int> stack;
int cur = 0;
for(auto& e : pushed)
{
stack.push_back(e);//入栈
while(!stack.empty() && stack.back() == popped[cur])//判断栈顶元素是否和 poped 的一样
{
stack.pop_back();
cur++;
}
}
if(stack.empty()) return true;
else return false;
}
};