题目描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

【思路】借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后判断栈顶元素是不是出栈顺序的第一个元素,这里是4,很显然1≠4,所以我们继续压栈,直到相等以后开始出栈,出栈一个元素,则将出栈顺序向后移动一位,直到不相等,这样循环等压栈顺序遍历完成,如果辅助栈还不为空,说明弹出序列不是该栈的弹出顺序。

举例:

入栈1,2,3,4,5

出栈4,5,3,2,1

首先1入辅助栈,此时栈顶1≠4,继续入栈2

此时栈顶2≠4,继续入栈3

此时栈顶3≠4,继续入栈4

此时栈顶4=4,出栈4,弹出序列向后一位,此时为5,,辅助栈里面是1,2,3

此时栈顶3≠5,继续入栈5

此时栈顶5=5,出栈5,弹出序列向后一位,此时为3,,辅助栈里面是1,2,3

….

依次执行,最后辅助栈为空。如果不为空说明弹出序列不是该栈的弹出顺序。
import java.util.ArrayList;
import java.util.Stack;
public class Solution {public boolean IsPopOrder(int [] pushA,int [] popA) {if(pushA.length == 0 || popA.length == 0)return false;Stack<Integer> s = new Stack<Integer>();//用于标识弹出序列的位置int popIndex = 0;for(int i = 0; i< pushA.length;i++){s.push(pushA[i]);//如果栈不为空,且栈顶元素等于弹出序列while(!s.empty() &&s.peek() == popA[popIndex]){//出栈s.pop();//弹出序列向后一位popIndex++;}}return s.empty();}
}

剑指offer 栈的压入、弹出序列相关推荐

  1. 剑指offer-21.栈的压入弹出序列

    1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  2. 【剑指offer-Java版】22栈的压入弹出序列

    栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序 思路:纯粹的模拟栈的压入和弹出顺序 分别遍历压栈序列seq1和另一个序列seq2 比较当前栈顶元素和seq2 ...

  3. 数据结构与算法--举例分析法- 栈的压入弹出序列

    举例分析 与上两篇问中画图方法一样,我们可以用举例模拟的方法思考分析复杂问题.当一眼不能看出问题的规律的时候,我们可以用几个具体的例子来模拟一下问题的过程.这样就和我们在程序出现问题时候的debug一 ...

  4. python 栈的压入弹出序列

    | 栈的压入和弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序, 请判断第二个序列是否为该栈的弹出顺序. 假设压入栈的所有数字均不相等. 例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序 ...

  5. 剑指offer 31.栈的、压入弹出序列

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是 ...

  6. 2021-07-22剑指offer31.栈的压入、弹出序列

    将pushed数组中的数字压入栈中 用一个指针指向popped序列中的数字 栈中的数字与指针指向的数字相同,就将栈顶的数字弹出, 指针移动到下一位数字比较, 如果不相同,指针不移动,栈顶继续放入. c ...

  7. 剑指offer——栈

    栈,初听这个词还以为是战斗的战呢. 经过学习知道了此"栈"非彼战.栈,与我们小时候玩的那个汉诺塔游戏极其相似,最先放的圆盘最后出,最后放的圆盘最先出,汉诺塔的示意图如下图所示:(此 ...

  8. 剑指Offer——栈的java实现和栈的应用举例

    栈是一种先进后出的数据结构, 栈的实现如下: 首先定义了栈需要实现的接口: public interface MyStack<T> {/*** 判断栈是否为空*/ boolean isEm ...

  9. 【LeetCode笔记】剑指 Offer 33. 二叉树的后序遍历序列(Java、递归、栈)

    文章目录 题目描述 思路 && 代码 1. 递归做法 2. 辅助栈做法 二刷 打卡第四天-昨天没来得及写博客= = 题目描述 无须多言,直接冲思路吧! 思路 && 代码 ...

最新文章

  1. 【c语言】蓝桥杯算法提高 c++_ch02_04
  2. word设置不同页脚
  3. 用户视角看百度移动:从流量集散地到流量目的地
  4. vim尾部空格标红显示插件
  5. python中的__iter__ __reversed__ __next__
  6. 2018年第九届蓝桥杯 - 省赛 - Java大学A组 - A.复数幂
  7. Docker的运行机制
  8. 关于vscode插件autoprefixer 3.0无法使用的问题
  9. (JAVA)Object类之toString()和equals()
  10. FD.io VPP对 DPDK的详细配置:绑定网卡,启动VPP
  11. 如何在C预处理器中可靠地检测Mac OS X,iOS,Linux,Windows? [重复]
  12. python 网页设计_使用Python制作获取网站目录的图形化程序
  13. 小学学校计算机室文化建设方案,计算机室文化建设方案
  14. 第六章 实验报告 (函数与宏定义)
  15. LINUX修改网卡MAC地址
  16. SpringMVC 自定义转换器
  17. iptables的基础知识-iptables中的ICMP
  18. sketch up rbs/rbz/rb插件安装方法
  19. 放弃FD渠道模式 诺基亚中国新攻略
  20. Android中多个style,Android设计规范 Material Design-Style(4图像)

热门文章

  1. 13行代码AC_Justifying the Conjecture Gym - 102394J(解题报告)
  2. 视频讲解——零基础玩转微信小程序
  3. MySQL为什么有时候会选错索引?
  4. 进阶Linux大佬的奠基石
  5. openstack租户管理_openstack 租户、用户管理
  6. 人类一败涂地显示服务器,人类一败涂地怎么开服务器 | 手游网游页游攻略大全...
  7. java自定义findbugs规则_静态代码扫描 (三)——FindBugs 自定义规则入门
  8. 郑卅航院计算机与科学是一本吗,郑州航空工业管理学院计算机科学与应用系
  9. ar ebs 销售订单关闭_有关销售订单的工作流(workflow)定义和处理方式
  10. android多音字排序,Android拼音排序