【剑指offer】【栈】31.栈的压入、弹出序列
题目链接:https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/
栈
两种操作:(二者只能有一个执行)
1)将下一个数加入栈中;
2)将当前栈顶元素弹出;
- 判断当前栈顶元素与下一个要输出的数是否一样:
一样,将栈顶元素弹出;不同,将输入序列中下一个数入栈。 - 遍历完,如果栈空,说明出栈顺序正确;
时间复杂度:O(N)
空间复杂度:O(N)
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
if(pushed.size() != popped.size()) return false;
int n = pushed.size();
stack<int> st;
int j = 0;
for(int i = 0; i < n; i++)
{
//将元素入栈
st.push(pushed[i]);
//判断当前栈顶元素与下一个要出栈的数是否一样 一样=====>出栈
while(!st.empty() && st.top() == popped[j]) st.pop(), j++;
}
return st.empty();
}
};
知识的价值不在于占有,而在于使用

浙公网安备 33010602011771号