AcWing 42. 栈的压入、弹出序列
原题链接
简单
作者:
小笨比
,
2021-03-12 03:13:43
,
所有人可见
,
阅读 469
class Solution {
public:
bool isPopOrder(vector<int> pushV,vector<int> popV) {
stack<int> s;
if(pushV.size() != popV.size()) return false;
//逆置弹出序列,方便操作
reverse(popV.begin(), popV.end());
for(auto x : pushV)
{
s.push(x);
//如果栈顶和弹出序列尾相等,删除两个数
while(!s.empty() && s.top() == popV.back())
{
s.pop();
popV.pop_back();
}
}
//如果s为空,则说明入栈顺序可以得到出栈顺序,返回true
//另外,如果两个数组都为空,那么前面的操作都不会执行,s也为空,返回true
return s.empty();
}
};
时间复杂度
- 逆置弹出数组o(n)
- 遍历入栈数组o(n),弹栈和删尾操作最多各执行n次,也是o(n)