您的位置:首页 > Web前端

剑指offer(12)-栈的压入弹出序列

2016-10-16 17:29 169 查看
题目:输入两个整数序列,第一个序列表示栈的压入序列,请判断第二个序列是否为栈的弹出顺序,假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压入序列,4、3、5、1、2就不可能是该压栈序列的弹出序列。

书中用双栈的方法来解决,这个方法比较麻烦也不容易理解,用一个栈就好了,只要将栈序列一个一个压入,

检测栈中是否为空,若空,说明出栈队列可由原数列进行栈操作得到。否则,说明出栈队列不能由原数列进行栈操作得到,这样代码比较好写,也很简洁。

class Solution {
public:

bool IsPopOrder(vector<int> pushV,vector<int> popV) {
if(pushV.empty() || popV.empty())
return false;
if(pushV.size() != popV.size())
return false;
stack<int> s;
int j = 0;
for(int i = 0;i < pushV.size();++i)
{
s.push(pushV[i]);
while((!s.empty()) && s.top() == popV[j])
{
s.pop();
++j;
}
}
if(s.empty())
return true;
else
return false;
}
};


这里发现牛客网的一个小BUG,如果(!s.empty()) && s.top() == popV[j]写成s.top() == popV[j] && (!s.empty()) 的话就说是发生了段错误。。。。。。然而并没有什么错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: