第29题:推断一个序列是否是还有一个push序列的pop序列
github:https://github.com/frank-cq/MyTest
第29题:输入两个整数序列,当中一个序列表示栈的push顺序,推断还有一个序列有没有可能是相应的pop顺序。为了简单起见,我们如果push序列的随意两个整数都是不相等的。比方输入的push序列是 1、2、3、4、5。那么4、5、3、2、1 就有可能是一个pop序列,由于能够有例如以下的push和pop序列:push 1, push 2, push 3, push 4,pop, push 5, pop, pop, pop, pop。这样得到的pop序列就是4,5,3,2,1.但序列4,3,5,1,2就不可能是push序列1、2、3、4、5的pop序列。
代码
package test029;
import java.util.Stack;
/**
* Created by cq on 2015/6/28.
* 第29题:输入两个整数序列,当中一个序列表示栈的push顺序,推断还有一个序列有没有可能是相应的pop顺序。
* 为了简单起见,我们如果push序列的随意两个整数都是不相等的。比方输入的push序列是 1、2、3、4、5,那么
* 4、5、3、2、1 就有可能是一个pop序列,由于能够有例如以下的push和pop序列:push 1, push 2, push 3, push 4,
* pop, push 5, pop, pop, pop, pop。这样得到的pop序列就是4,5,3,2,1.但序列4,3,5,1,2就不可能是push序列
* 1、2、3、4、5的pop序列。
*/
public class Test029 {
public static boolean isCorrespondPopOrder(int[] pushArr, int[] popArr){
if (pushArr.length != popArr.length){
return false;
}
Stack<Integer> stack = new Stack<Integer>();
int i = 0, j = 0;
while (i < popArr.length){
//入栈
while (j < pushArr.length){
stack.push(pushArr[j]);
j++;
if (pushArr[j-1] == popArr[i]){
break;
}
}
//出栈
int top = stack.pop(); //获取栈顶元素
while (i < popArr.length){
//栈顶元素等于出栈序列当前元素,则继续出栈
if (top == popArr[i]){
i++;
if (stack.isEmpty()){ //栈已空,跳出循环
break;
}
top = stack.pop();
}
//栈顶元素不等于出栈序列当前元素。恢复栈顶元素
else {
stack.push(top);
break;
}
}
//正确情况下。入栈已经完成,那么出栈也完成,由于入栈在出栈之前
if (j == pushArr.length){
break;
}
}
return stack.isEmpty();
}
public static void main(String[] args){
int[] pushArr = {1,2,3,4,5};
int[] popArr = {4,5,3,2,1};
int[] popArr2 = {4,3,5,1,2};
System.out.println("4,5,3,2,1 是 1,2,3,4,5 的一个出栈序列:"+isCorrespondPopOrder(pushArr,popArr));
System.out.println("4,3,5,1,2 是 1,2,3,4,5 的一个出栈序列:"+isCorrespondPopOrder(pushArr,popArr2));
}
}
运行结果
Connected to the target VM, address: '127.0.0.1:25254', transport: 'socket'
Disconnected from the target VM, address: '127.0.0.1:25254', transport: 'socket'
4,5,3,2,1 是 1,2,3,4,5 的一个出栈序列:true
4,3,5,1,2 是 1,2,3,4,5 的一个出栈序列:false
Process finished with exit code 0
第29题:推断一个序列是否是还有一个push序列的pop序列的更多相关文章
- 剑指offer 面试29题
面试29题: 题目:顺时针打印矩阵(同LeetCode 螺旋矩阵打印) 题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 ...
- 栈的push、pop序列 【微软面试100题 第二十九题】
题目要求: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1是该压栈 ...
- [原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥)
[原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥) nohacks 发表于 2016-5-29 17:12:51 https:// ...
- 据序和中序序列或者也许为了一个二进制序列,恢复二进制和打印图像(c语言)
首先要预购和序,以恢复它: 1.首先,我们使用的是递归的方式来完成 2.递归的最小单位:一个空的树和书的前言和第一序.该序列的第一个元素是树的第一序列根,调用这种方法 3.递归的终止条件是.当这棵树的 ...
- ZOJ 3963 Heap Partition set维护。给一个序列,将其划分成尽量少的序列,使每一个序列满足按照顺序构造二叉树,父母的值<=孩子的值。
Heap Partition Time Limit: Seconds Memory Limit: KB Special Judge A sequence S = {s1, s2, ..., sn} i ...
- 笔试算法题(14):整数二进制表示中的1 & 判定栈的push和pop序列是否对应
出题:输入一个整数,要求计算此整数的二进制表示中1的个数 分析: 如果整数表示为k,当其是负数的时候,使用1<<i分别检测k的每一位:当其位整数的时候,则k/2表示将其二进制表示右移一位, ...
- 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数
今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...
- 【剑指Offer面试编程题】题目1367:二叉搜索树的后序遍历序列--九度OJ
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入: 每个测试案例包括2行: 第一行为1个整数 ...
- 一个序列是否可能是push序列的pop序列
输入:两个序列A.B,A作栈的push序列,判断B是否可能是A的pop序列. #include<iostream> #include<stack> using namespac ...
随机推荐
- IO负载高的来源定位
前言: 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的util),但是无法快速的定位到IO负载的来源进程和来源文件导致无法进行相应的策略来解决问题. 这个现象在MySQ ...
- IOS 正则表达式匹配文本中URL位置并获取URL所在位置(解决连接中文问题)
需求很简单,是从一段文本中匹配出其中的超链接.基本的做法就是用正则表达式去匹配.但是有这样一个问题. 网上大部分的识别URL的正则表达式url末尾有空格的情况下可以正确识别.比如这样的情况. 我是一段 ...
- Arc Engine 中添加气泡提示框
一.在ArcMap中的定位操作 已知若干点的经纬度坐标,要求在地图中进行定位: 1.通过Tool >Add X Y data 定位点,注意选择地理坐标系下的wgs 1984坐标系: 2.定位后的 ...
- IOS AsyncSocket
导入AsyncSocket.h AsyncSocket.m AsyncUdpSocket.h AsyncUdpSocket.m 以及 CFNetWork.framework async ...
- SQL对字符串进行排序
假设字符串中只由'A'.'B'.'C'.'D'组成,且长度为7.并设函数REPLICATE(<字符串>,<n>)可以创建一个<字符串>的n个副本的字符串,另外还有R ...
- Windows安装pomelo过程
安装总要出点状况的.操作系统是win7 64bit. 为了保证顺利,打开的是VS2012命令行提示.运行 npm install -g pomelo 经过一系列输出,最后安装提示完成了.但是输入 po ...
- libpomelo的cocos2d-x客户端使用总结
这几天看了libpomelo的cocos2dx客户端这是个聊天室,由2个场景构成,登录场景LoginScene,聊天场景ChatScene. 一. LoginScene 客户端是以Login场景来启动 ...
- ACCESS TOKEN
Access Token 在微信公众平台接口开发中,Access Token占据了一个很重要的地位,相当于进入各种接口的钥匙,拿到这个钥匙才有调用其他各种特殊接口的权限. access_token是公 ...
- Python 学习笔记(三)Function
python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 1. Scope: • If a variable is assi ...
- 最近的bug列表总结(C++)
最近写了一大段代码,抽象得厉害,容易绕进去,因为写单测的代价很大(借口),所以很多问题到联调的是否才发现. 而且花费了很大的经历才查出来,主要问题有如下几个问题 1. 变量未初始化 具体来说,就是指针 ...