剑指offer(12)-栈的压入弹出序列
2016-10-16 17:29
169 查看
题目:输入两个整数序列,第一个序列表示栈的压入序列,请判断第二个序列是否为栈的弹出顺序,假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压入序列,4、3、5、1、2就不可能是该压栈序列的弹出序列。
书中用双栈的方法来解决,这个方法比较麻烦也不容易理解,用一个栈就好了,只要将栈序列一个一个压入,
检测栈中是否为空,若空,说明出栈队列可由原数列进行栈操作得到。否则,说明出栈队列不能由原数列进行栈操作得到,这样代码比较好写,也很简洁。
这里发现牛客网的一个小BUG,如果(!s.empty()) && s.top() == popV[j]写成s.top() == popV[j] && (!s.empty()) 的话就说是发生了段错误。。。。。。然而并没有什么错误。
书中用双栈的方法来解决,这个方法比较麻烦也不容易理解,用一个栈就好了,只要将栈序列一个一个压入,
检测栈中是否为空,若空,说明出栈队列可由原数列进行栈操作得到。否则,说明出栈队列不能由原数列进行栈操作得到,这样代码比较好写,也很简洁。
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()) 的话就说是发生了段错误。。。。。。然而并没有什么错误。
相关文章推荐
- 剑指Offer(21)______栈的压入、弹出序列
- 剑指offer面试题之栈的压入、弹出序列
- 【剑指offer系列】 栈的压入和弹出序列___22
- 剑指offer:栈的压入、弹出序列
- 《剑指offer》栈的压入、弹出序列
- [剑指offer学习心得]之:栈的压入、弹出序列
- 剑指offer 编程题(20):栈的压入和弹出序列比较
- 《剑指offer》刷题笔记(举例让抽象具体化):栈的压入、弹出序列
- 剑指offer:栈的压入、弹出序列
- 剑指offer--栈的压入、弹出序列
- 剑指offer-面试题22:栈的压入、弹出序列
- 剑指offer:栈的压入、弹出序列
- 剑指offer(18)-栈的压入、弹出序列
- 《剑指offer》栈的压入、弹出序列
- 《剑指offer》栈的压入、弹出序列
- 《剑指offer》——栈的压入、弹出序列
- 剑指offer(23):栈的压入、弹出序列
- 剑指offer系列之二十:栈的压入、弹出序列
- 剑指offer:(22)举例让抽象问题具体化 :栈的压入,弹出序列
- 剑指Offer(Java版):栈的压入、弹出序列