一、问题描述

给定两个数组,一个进栈顺序,一个出栈顺序。判定出栈数组的出栈顺序是不是有可能的。

二、Code

 1 package algorithm;
 2
 3 import java.util.ArrayDeque;
 4 import java.util.Deque;
 5
 6 /**
 7  * Created by adrian.wu on 2019/5/30.
 8  */
 9 public class StackPopOrderJudge {
10     /*
11     思路:
12     1、整体思路用一个辅助栈还原入栈元素的顺序,并比较两者是否一致
13     2、如果第一个出栈元素并非最后一个入栈元素,则这个出战元素之前的元素不可能先于它出栈,因此把这个元素即之前的元素都压入栈
14     3、上述步骤之后,如果出栈元素并非入栈栈顶元素,则其是先pop出去了,因此直接压人辅助栈
15     4、重复上述步骤,并比较辅助栈和压入栈的元素,遇到相同则pop
16     5、观察最后入栈元素和辅助栈是否都为空,为空则正确,不为空则False
17      */
18
19     public static boolean isPopOrder(int[] in, int[] out) {
20         int n = out.length;
21         int nextPop = 0, nextPush = 0;
22         Deque<Integer> deque = new ArrayDeque<>();
23
24
25         while (nextPop != n) {
26             while (deque.isEmpty() || deque.peek() != out[nextPop]) {
27                 if (nextPush == n) break;
28                 deque.push(in[nextPush++]);
29             }
30
31             if (!deque.isEmpty() && deque.peek() != out[nextPop++]) break;
32             deque.pop();
33         }
34         return nextPop == n && deque.isEmpty();
35     }
36 }

转载于:https://www.cnblogs.com/ylxn/p/10954150.html

(24) 不可能的出栈顺序相关推荐

  1. 根据入栈顺序判断出栈顺序的合法性

    这道题不管是面试还是笔试的选择题都非常爱出的一道题 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4 ...

  2. 判断出栈顺序的合法性(面试题)

    判断出栈顺序的合法性 "栈"是一种限制性线性表,是将线性表的插入.删除操作限制为仅在表的一端进行,一般将能够插入.删除的一端称为栈顶,表的另一端称为栈底.当栈中没有元素时称为空栈. ...

  3. 出栈顺序 与 卡特兰数(Catalan)的关系

    一,问题描述 给定一个以字符串形式表示的入栈序列,请求出一共有多少种可能的出栈顺序?如何输出所有可能的出栈序列? 比如入栈序列为:1 2 3  ,则出栈序列一共有五种,分别如下:1 2 3.1 3 2 ...

  4. 数据结构----依据出栈顺序判断所需的最少栈空间

    1 问题描述 问题: 若元素 a,b,c,d,e,f,g 顺序进栈,且出栈顺序是 b,d,c,f,e,a,g 则栈的容量至少是_____ 答案:3 2 解法描述与分析 2.1 解法描述 记 1,2,3 ...

  5. 数据结构----出栈顺序有效性的判断

    1 问题描述 问题1:若元素 a,b,c,d,e,f 顺序进栈, 则不准许的出栈顺序是 A. d,c,e,b,f,a    B. c,b,d,a,e,f    C. b,c,a,e,f,d    D. ...

  6. 【PAT甲】1051 Pop Sequence (25分)判断出栈顺序的合法性

    problem 1051 Pop Sequence (25分) Given a stack which can keep M numbers at most. Push N numbers in th ...

  7. 判断栈的出栈顺序是否正确

    一 问题描述:      两个数组pPush和pPop分别存储了压栈序列和出栈序列,如何判断出栈序列是否正确,假设元素不重复.      需要实现的函数: bool isStackOutRight(i ...

  8. 出栈顺序(栈和队列)B

    <center><h2>问题 B: 出栈顺序(栈和队列)</h2><span class="green">时间限制: </sp ...

  9. n个元素进栈,共有多少种出栈顺序?

    1.基于栈的问题分析 我们把n个元素的出栈个数的记为f(n), 那么对于1,2,3, 我们很容易得出: f(1) = 1     //即 1 f(2) = 2     //即 12.21 f(3) = ...

最新文章

  1. 关于STRONG NAME
  2. src漏洞挖掘|一个谎言需要无数谎言来弥补
  3. 优秀!师兄妹齐发Science,师妹22岁担任一作!同为曹原中科大校友
  4. 使用函数返回值的循环例子
  5. oracle rowid说明
  6. go去掉最后一个字符_可维护的Go代码程序指南(一)之变量篇
  7. Flex Builder3编译时生成as
  8. python爬虫js加密篇—搜狗微信公号文章的爬取
  9. roundcube db.inc.php,roundcube 邮箱 用户不能修改密码
  10. win7安装micropython串口驱动失败
  11. Linux环境下获取硬盘序列号
  12. 怎么在html模板里加图片,页面中添加图片模块并编辑
  13. cadence一些快捷键
  14. maya 中的 cmds.scriptJob 命令
  15. 【力学】关于力学的一些基础知识
  16. 简单上手理解Dav框架
  17. 我的世界无限资源的服务器,我的世界无限资源单机版
  18. js下载Word文档
  19. docker修改配置文件之后,导致不能启动
  20. MyBatis -- resultType 和 resultMap

热门文章

  1. STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结
  2. 安装secureCRT提示sorry的解决办法
  3. 2清空所有表_拉链表(二)
  4. mysql getcolumnname_jdbc-mysql基础 ResultSetMetaData getColumnName getColumnLabel 得到列的名字和别名...
  5. Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
  6. 后端:SpringBoot 的@Value注解,高级特性,非常实用!!
  7. 硬件知识:串口通讯的起始、数据、停止位是怎么分配的?
  8. Java 13,最新最全新特性解读
  9. Linux中shell变量作用域笔记
  10. 2019温馨的元旦祝福语 2019元旦祝福语大全!收藏备用!