博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer——栈的压入、弹出序列
阅读量:6705 次
发布时间:2019-06-25

本文共 1300 字,大约阅读时间需要 4 分钟。

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个栈是否为该栈的弹出顺序。假设压入栈的所有数字都不相等。例如序列1,2,3,4,5是某个栈的压入顺序,序列4,5,3,2,1是该栈序列的一个弹出序列,但是4,3,5,1,2就不是其弹出序列。(两序列长度相同)

思路:主要是栈的压入和弹出序列

借用大神链接:

 

为此我们加入一个辅助栈,在将压入顺序矩阵依次压入辅助栈的同时,判断其栈顶元素是否是弹出序列的栈顶元素,若是,则将辅助栈的栈顶元素弹出,并将弹出序列的待判断数向后移一位。若辅助矩阵不为空,则继续判断辅助矩阵栈顶元素是否和弹出序列的待判断数相同,若相同,则继续弹出辅助矩阵,若不相同,则将压入序列继续压入辅助矩阵。

当弹出序列被遍历完成,且辅助矩阵为空,则匹配成功。

1 import java.util.ArrayList; 2 import java.util.Stack; 3 //首先判断是否为空,若为空则返回错误 4 //采用辅助栈的方法来对栈进行操作 5 //将push中的元素依次压入辅助栈中,压入一个则将其与pop中的元素进行比较,如相等,则将辅助栈中该元素弹出 6 //之后再将pop中需要判断的元素向后推一个,并与辅助栈中元素对比,相等则继续弹出,不相等,则将push中元素继续压入辅助栈,并进行对比 7 //直到pop栈中元素遍历结束,若此时辅助栈不为空,则返回false,否则返回true 8 public class Solution { 9     public boolean IsPopOrder(int [] pushA,int [] popA) {10         if(pushA.length ==0||popA.length == 0)11           return false;12         Stack
s = new Stack
();13 int popIndex = 0;//用于标识弹出序列的位置14 for(int i = 0;i

 在对上述程序进行验证的过程中,我发现当pushA的大小大于popA时,也会输出true,这说明题目中假定两个序列长度相同,就代表我们不需要对序列长度再次进行判断。

1     public static void main(String [] args) {2         Solution1 x = new Solution1();3         int [] pushA = {1,2,3,4,5,6};4         int [] popA = {4,5,3,2,1};5         System.out.println(x.IsPopOrder(pushA,popA));6     }

此时依旧返回True.开心,自己看出并验证出的小发现。

转载于:https://www.cnblogs.com/10081-AA/p/10732694.html

你可能感兴趣的文章
[原]RobotFrameWork(一)robotframework(python版)及Ride在ubuntu下安装
查看>>
2018-06-27随想
查看>>
Stream.findFirst的一个疑问
查看>>
深入理解java虚拟机(二)HotSpot Java对象创建,内存布局以及訪问方式
查看>>
PYTHON 模块
查看>>
软件开发模式对比(瀑布、迭代、螺旋、敏捷)
查看>>
css默认被后代inherite的属性列表
查看>>
酷客多郝宪玮:不够小程序化的企业,将错失最近5年的流量红利
查看>>
2017年淘客全新玩法——代理模式
查看>>
《开源安全运维平台OSSIM最佳实践》媒体推荐
查看>>
JavaScript服务器编程(对象属性枚举中应当避免原型污染问题)
查看>>
【ORACLE技术嘉年华PPT】MySQL压力测试经验
查看>>
用using取别名居然不支持泛型…
查看>>
NET也不能忽略基础
查看>>
ROR随想(2009年)
查看>>
AT发送短信(转)
查看>>
DataTable.Compute方法使用实例
查看>>
VB操作ISNULL
查看>>
PIC452外部中断进不去的原因?
查看>>
2.9 Fibonacci数列
查看>>