29.栈的push、pop 序列
来源:互联网 发布:斑马410网络打印设置 编辑:程序博客网 时间:2024/05/29 12:48
题目:输入两个整数序列。其中一个序列表示栈的push 顺序,
判断另一个序列有没有可能是对应的pop 顺序。
为了简单起见,我们假设push 序列的任意两个整数都是不相等的。
比如输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列。
因为可以有如下的push 和pop 序列:
push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,
这样得到的pop 序列就是4、5、3、2、1。
判断另一个序列有没有可能是对应的pop 顺序。
为了简单起见,我们假设push 序列的任意两个整数都是不相等的。
比如输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列。
因为可以有如下的push 和pop 序列:
push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,
这样得到的pop 序列就是4、5、3、2、1。
但序列4、3、5、1、2 就不可能是push 序列1、2、3、4、5 的pop 序列。
HANDWRITING:
bool sequence (int *push, int *pop, int size) {stack<int> s;int in = 0, out = 0;while (out != size) {if (!s.empty() && s.top() == pop[out]) {s.pop(); ++out;} else if (in != size) {s.push( push[in] ); ++in;} else {return false;}}return true;}
ANSWER FROM:http://blog.csdn.net/v_july_v/article/details/6870251
This seems interesting. However, a quite straightforward and promising way is to actually build the stack and check whether the pop action can be achieved.
int isPopSeries(int push[], int pop[], int n) {stack<int> helper;int i1=0, i2=0;while (i2 < n) {while (stack.empty() || stack.peek() != pop[i2]) {if (i1<n) stack.push(push[i1++]);else return 0;while (!stack.empty() && stack.peek() == pop[i2]) {stack.pop(); i2++;}}}return 1;}
- 29.栈的push、pop 序列
- 29.栈的push、pop 序列
- 29.栈的push、pop序列
- 29.栈的push、pop 序列
- 栈的push、pop序列
- 栈的push,pop序列
- 栈的push、pop序列
- 栈的push、pop序列
- 栈的push、pop序列
- 栈的push、pop序列
- 栈的push、pop序列
- 栈的push、pop序列
- 栈的push、pop序列
- 栈的push、pop序列
- 栈的push、pop序列
- 栈的push、pop序列
- 栈的push、pop序列
- 栈的push,pop序列
- 计算机组成原理
- POJ 1724 最短路费用限制
- 网址批量缩短工具
- uva 10420 List of Conquests
- ch05 Servlet技术
- 29.栈的push、pop 序列
- Direct UI
- 关于DMA的学习
- 简单工厂模式,工厂方法模式及抽象工厂模式比较
- 深入理解php原理之变量分离/引用
- Boost 1.46.1编译成VS2008版本
- 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
- 关于如何把canvas中的内容转换为图片上传到服务器的操作过程
- 精选实用正则表达式