模拟题,其实想通了真的不难
依次往s1里面push进去元素,当s1不为空且栈顶元素等于出栈元素时(来一个index指向出栈序列,消掉一个就index++,直到消完),s1和s2互消,消完了继续push。push完而且消完后,s1应该是空的,如果非空就false
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
//模拟题:先将出栈数组按烦序入辅助栈
//将入栈数组入栈,直到找到和辅助栈的栈顶一样的元素
//如果两个栈的栈顶相等,一起出栈,这个元素是正确的,不用再判断了
//如果入完了,就出栈找和辅助栈顶一样的元素。
//更好的方法就是不用入栈了,直接拿一个index标记现在指向出栈数组的第几位即可
if(pushV.size() == 0 || popV.size() == 0) return false;
stack<int> s1;
int index = 0;
for(int i = 0; i < pushV.size(); ++i){
s1.push(pushV[i]);
//如果栈不为空,且弹出序列等于该栈栈顶元素
while(!s1.empty() && s1.top() == popV[index]){
s1.pop();
index++;
}
}
return s1.empty();
}
};