算法复习:栈的压入、弹出序列
来源:互联网 发布:ghost32软件详解 编辑:程序博客网 时间:2024/06/17 18:05
题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
解题思路:
首先看弹出栈的第一个数字是4,所以栈里面必须有1,2,3,4了,因为题目已经告知是按照1,2,3,4,5的顺序压入栈。把4弹出之后弹出栈是5,站内剩下1,2,3,栈顶不是5,所以需要在弹入栈中按顺序弹入数字,直到是5。再弹出5之后是3,与栈顶元素相同,依次弹出。
写代码思路:
首先构造一个栈,再遍历弹出栈,假如要弹出数字是栈顶数字,直接弹出,假如不是或者栈为空,则依次压入弹入栈数字。最后都弹出了,栈为空则符合
Java代码如下:
public boolean IsPopOrder(int[] pushA, int[] popA) { boolean bPopOrder = false; if (pushA != null && popA != null) { int popIndex = 0; Stack<Integer> stack = new Stack<Integer>(); for (int i = 0; i < popA.length; i++) { while (stack.isEmpty() || stack.peek() != popA[i]) { if (popIndex > pushA.length - 1) { break; } stack.push(pushA[popIndex++]); } if (stack.peek() != popA[i]) break; stack.pop(); } if (stack.isEmpty()) bPopOrder = true; } return bPopOrder;
如有错误,往指正
阅读全文
0 0
- 算法复习:栈的压入、弹出序列
- 栈的压入、弹出序列(算法)
- 算法题目---栈的压入、弹出序列
- 栈的压入、弹出序列 -- 漫漫算法路 刷题篇
- 算法题/栈的压入,弹出序列
- 算法001号:栈顶的压入弹出序列
- 1366栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- Q22:栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 第一章:pip 安装 tar.gz 结尾的文件 和 .whl 结尾的文件
- Android开源库V
- 中西方的信仰差异
- VB.NET在WinCE5.0中异常转储试验
- Java 集合系列07之 Stack源码解析
- 算法复习:栈的压入、弹出序列
- python2.7版本链接MySQL数据库
- 【高效生活】IDEA与JRebel
- ubuntu caffe
- LeetCode--3Sum Closest
- 为什么static修饰SimpleDateFormat会有问题
- 哪些域名才是真正意义上的好域名?
- 机器学习之线性分类器(Linear Classifiers)——肿瘤预测实例
- 架构师之路-网络框架的搭建(高逼格)