题目大意,给出两个序列一个代表压入序列,一个代表弹出序列,判断这是否是一个合理的弹出序列。
一开始看到这个问题的时候直接想到了二叉树的先序中序,构造后续(我也不知道我的思路为什么这么清奇)。
后来发现自己的思路歪了,然后简单的认为只需要判断弹出序列中,在判断某个数是否合理时,只需要判断在他之前弹出的数是否在压入序列中排在他的后面。但是后来想想又不对,顿时陷入僵局。
后来查看了讨论中的代码。
直接使用vector去模拟压入弹出过程即可= =,如果最后全部弹出了,那么就是合理的,没有全部弹出那么就是不合理的。
我的天啊,感觉自己的脑子已经不够用了
改造了一下,使用栈
bool IsPopOrder(vector<int> pushV, vector<int> popV) {
if (pushV.size() == 0) return false;
stack<int> s;
for (int i = 0, j = 0; i < pushV.size();) {
s.push(pushV[i++]);
while (j < popV.size() && s.top() == popV[j]) {
s.pop();
j++;
}
}
return s.empty();
}