(24) 不可能的出栈顺序
一、问题描述
给定两个数组,一个进栈顺序,一个出栈顺序。判定出栈数组的出栈顺序是不是有可能的。
二、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,2,3,4 ...
- 判断出栈顺序的合法性(面试题)
判断出栈顺序的合法性 "栈"是一种限制性线性表,是将线性表的插入.删除操作限制为仅在表的一端进行,一般将能够插入.删除的一端称为栈顶,表的另一端称为栈底.当栈中没有元素时称为空栈. ...
- 出栈顺序 与 卡特兰数(Catalan)的关系
一,问题描述 给定一个以字符串形式表示的入栈序列,请求出一共有多少种可能的出栈顺序?如何输出所有可能的出栈序列? 比如入栈序列为:1 2 3 ,则出栈序列一共有五种,分别如下:1 2 3.1 3 2 ...
- 数据结构----依据出栈顺序判断所需的最少栈空间
1 问题描述 问题: 若元素 a,b,c,d,e,f,g 顺序进栈,且出栈顺序是 b,d,c,f,e,a,g 则栈的容量至少是_____ 答案:3 2 解法描述与分析 2.1 解法描述 记 1,2,3 ...
- 数据结构----出栈顺序有效性的判断
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. ...
- 【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 ...
- 判断栈的出栈顺序是否正确
一 问题描述: 两个数组pPush和pPop分别存储了压栈序列和出栈序列,如何判断出栈序列是否正确,假设元素不重复. 需要实现的函数: bool isStackOutRight(i ...
- 出栈顺序(栈和队列)B
<center><h2>问题 B: 出栈顺序(栈和队列)</h2><span class="green">时间限制: </sp ...
- n个元素进栈,共有多少种出栈顺序?
1.基于栈的问题分析 我们把n个元素的出栈个数的记为f(n), 那么对于1,2,3, 我们很容易得出: f(1) = 1 //即 1 f(2) = 2 //即 12.21 f(3) = ...
最新文章
- 关于STRONG NAME
- src漏洞挖掘|一个谎言需要无数谎言来弥补
- 优秀!师兄妹齐发Science,师妹22岁担任一作!同为曹原中科大校友
- 使用函数返回值的循环例子
- oracle rowid说明
- go去掉最后一个字符_可维护的Go代码程序指南(一)之变量篇
- Flex Builder3编译时生成as
- python爬虫js加密篇—搜狗微信公号文章的爬取
- roundcube db.inc.php,roundcube 邮箱 用户不能修改密码
- win7安装micropython串口驱动失败
- Linux环境下获取硬盘序列号
- 怎么在html模板里加图片,页面中添加图片模块并编辑
- cadence一些快捷键
- maya 中的 cmds.scriptJob 命令
- 【力学】关于力学的一些基础知识
- 简单上手理解Dav框架
- 我的世界无限资源的服务器,我的世界无限资源单机版
- js下载Word文档
- docker修改配置文件之后,导致不能启动
- MyBatis -- resultType 和 resultMap
热门文章
- STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结
- 安装secureCRT提示sorry的解决办法
- 2清空所有表_拉链表(二)
- mysql getcolumnname_jdbc-mysql基础 ResultSetMetaData getColumnName getColumnLabel 得到列的名字和别名...
- Leetcode 给定一个数组,给定一个数字。返回数组中可以相加得到指定数字的两个索引
- 后端:SpringBoot 的@Value注解,高级特性,非常实用!!
- 硬件知识:串口通讯的起始、数据、停止位是怎么分配的?
- Java 13,最新最全新特性解读
- Linux中shell变量作用域笔记
- 2019温馨的元旦祝福语 2019元旦祝福语大全!收藏备用!