[剑指offer]栈的压入、弹出序列
2016-04-27 21:25
302 查看
题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。分析:用一个辅助栈模拟压入弹出操作,当栈顶不等于弹出序列中指向的值时,就一直压入,直到遇到相等,返回false的情况是全部压完了,但是栈顶元素和弹出序列中指向的元素不等。
class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { int n=pushV.size(); if(n==0) return false; stack<int> s; s.push(pushV[0]); int i=1; int j=0; while(j<n){ while(i<n&&s.top()!=popV[j]){ s.push(pushV[i++]); } if(s.top()==popV[j]){ s.pop(); j++; }else{ return false; } } return true; } };
讨论区有人用了vector来记录,也很巧妙。
class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { int n=pushV.size(); if(n==0) return false; vector<int> s; int i=0; int j=0; while(i<n){ s.push_back(pushV[i++]); while(j<n&&s.back()==popV[j]){ s.pop_back(); j++; } } return s.empty(); } };
相关文章推荐
- react-native入门之ListView-安卓开发者的第一视角
- JavaScript语法
- JavaScript学习汇总
- jquery.min.js一引入到工程中显示红叉
- node log4js包
- (转载)Javascript 严格模式详解
- [Angular 2] Using Two Reducers Together
- 78_Json解析
- 剑指offer(41):判断二叉树是否为平衡二叉树(AVL树)
- js实现打字机效果
- js定时器学习笔记
- JavaScript 如何判断一个对象{}是否为空对象
- cojs 疯狂的魔法树 疯狂的颜色序列 题解报告
- JSON--百度百科
- JavaScript基础学习(六)—函数
- jQuery--百度百科
- JSP--百度百科
- java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.IdentNod
- 超炫的HTML5粒子效果进度条 VS 如何规范而优雅地code
- CSS实现特殊背景效果