题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
#include <array>
#include <vector>
class Solution {
public:
bool check(vector<int> in, vector<int> out) {
if(in.size() != out.size()) return false;
array<int, 2005> arr;
for(auto x: in) {
arr[x + 1000] = 1;
}
for(auto x: out) {
if(--arr[x + 1000] != 0) return false;
}
return true;
}
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
stack<int> stk;
array<int, 2005> arr {};
if(!check(pushV, popV)) return false;
while(!popV.empty()) {
//入栈
while(stk.empty() || (stk.top() != popV.front() && !pushV.empty())) {
if(arr[popV.front() + 1000]) return false;
stk.push(pushV.front());
arr[stk.top() + 1000] = 1;
pushV.erase(pushV.cbegin());
}
if(stk.top() != popV.front() && arr[popV.front() + 1000]) return false;
//出栈
while(!stk.empty() && stk.top() == popV.front()) {
//cout << stk.top() << " ";
arr[stk.top() + 1000] = 0;
stk.pop();
popV.erase(popV.cbegin());
}
}
return true;
}
};
