栈的压入、弹出序列(Java)
题目:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、 2、 3、 4、 5是某栈的压栈序列,序列4、 5、 3、 2 、1是该压栈序列对应的一个弹出序列,但4、 3 、5 、1 、2就不可能是该压栈序列的弹出序列。
思路:
首先借助一个辅助栈,把输入的第一个序列中的数字依次压入该辅助栈,并按照第二个序列的顺序依次从该栈中弹出数字。
以4、 5、 3、 2 、1为例分析:
再以4、 5、 3、 2 、1为例分析:
从上面的两个例子可以找到判断一个序列是不是栈的弹出序列的规律:如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止。如果所有的数字都压入栈了仍然没有找到下一个弹出的数字,那么该序列就不可能是一个弹出序列。
代码实现:
public boolean isPopOrder(int pPush[], int pPop[]){boolean bPossible = false;if(pPush.length == 0 || pPop.length == 0){bPossible = false;}Stack<Integer> stack = new Stack<Integer>();//用于标识弹出序列的位置int popIndex = 0;for (int i = 0; i < pPush.length; ++i) {stack.push(pPush[i]);while(!stack.isEmpty() && stack.peek() == pPop[popIndex]){stack.pop(); //出栈++popIndex;}}if(stack.isEmpty() && pPop.length-1 == popIndex){bPossible = true;}else{bPossible = false;}return bPossible;
}
小结:
学会有实例即举例子中找到规律,以及对栈的进栈和出栈的深度理解。
栈的压入、弹出序列(Java)相关推荐
- 【剑指offer-Java版】22栈的压入弹出序列
栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序 思路:纯粹的模拟栈的压入和弹出顺序 分别遍历压栈序列seq1和另一个序列seq2 比较当前栈顶元素和seq2 ...
- 数据结构与算法--举例分析法- 栈的压入弹出序列
举例分析 与上两篇问中画图方法一样,我们可以用举例模拟的方法思考分析复杂问题.当一眼不能看出问题的规律的时候,我们可以用几个具体的例子来模拟一下问题的过程.这样就和我们在程序出现问题时候的debug一 ...
- 剑指offer-21.栈的压入弹出序列
1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- python 栈的压入弹出序列
| 栈的压入和弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序, 请判断第二个序列是否为该栈的弹出顺序. 假设压入栈的所有数字均不相等. 例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序 ...
- 剑指offer 31.栈的、压入弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是 ...
- 剑指Offer(Java实现)栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 ...
- 剑指Offer--022-栈的压入、弹出序列
链接 牛客OJ:栈的压入.弹出序列 九度OJ:http://ac.jobdu.com/problem.php?pid=1366 GitHub代码: 022-栈的压入弹出序列 CSDN题解:剑指Offe ...
- java输出栈的弹出序列_剑指offer:栈的压入、弹出序列(Java)
1.题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是 ...
- 举例让抽象问题具体化:栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一 ...
- 剑指Offer之栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入书序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相同.例如1.2.3.4.5是某栈的压入序列,序列5.4.3.2.1是该栈对应的一 ...
最新文章
- 哈佛管理论丛:谁背上了令人讨厌的猴子
- 获得PMP证书的这一年
- linux中关于wifi函数,wifi详解(五)
- 什么是javadoc文档
- c语言环境窗口组成,如何搭建C语言环境
- mysql 5.7 binlog 压缩_mysql binlog压缩处理
- img之间出现缝隙的原因_神马情况?美缝剂施工出现脱胶是什么原因?
- 我的Android进阶之旅------Android如何去除GridView的按下或点击选中后的背景效果...
- java事件监听机制 概述
- 【微信商城小程序怎么弄】微信商城小程序开发的基本流程
- IDEA光标跟随原因是jdk载入的问题BUG 修正 需要I安装最新版本1.8JDK 1.9之后的不清楚 谨慎...
- 如何建设数据中台:精益数据创新体系
- java三国鼎立,网页游戏三国鼎立(武三国)一键服务端带教程及修改说明
- 应广单片机 c语言,应广单片机 MINI-C编程指南.pdf
- Javascript实现简单的超级马里奥小游戏
- 【数据分析】业务分析中常见模型-漏斗模型
- luogu P3899 [湖南集训]谈笑风生 线段树合并
- iOS开发 - Xcode使用 - 一直indexing
- 达人评测i7 1360p和i5 12500h差距 酷睿i71360p和i5 12500h选哪个
- 为什么不能每周发布一次?