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序列的更多相关文章

  1. 剑指offer 面试29题

    面试29题: 题目:顺时针打印矩阵(同LeetCode 螺旋矩阵打印) 题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 ...

  2. 栈的push、pop序列 【微软面试100题 第二十九题】

    题目要求: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1是该压栈 ...

  3. [原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥)

    [原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥) nohacks 发表于 2016-5-29 17:12:51 https:// ...

  4. 据序和中序序列或者也许为了一个二进制序列,恢复二进制和打印图像(c语言)

    首先要预购和序,以恢复它: 1.首先,我们使用的是递归的方式来完成 2.递归的最小单位:一个空的树和书的前言和第一序.该序列的第一个元素是树的第一序列根,调用这种方法 3.递归的终止条件是.当这棵树的 ...

  5. ZOJ 3963 Heap Partition set维护。给一个序列,将其划分成尽量少的序列,使每一个序列满足按照顺序构造二叉树,父母的值<=孩子的值。

    Heap Partition Time Limit: Seconds Memory Limit: KB Special Judge A sequence S = {s1, s2, ..., sn} i ...

  6. 笔试算法题(14):整数二进制表示中的1 & 判定栈的push和pop序列是否对应

    出题:输入一个整数,要求计算此整数的二进制表示中1的个数 分析: 如果整数表示为k,当其是负数的时候,使用1<<i分别检测k的每一位:当其位整数的时候,则k/2表示将其二进制表示右移一位, ...

  7. 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数

    今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...

  8. 【剑指Offer面试编程题】题目1367:二叉搜索树的后序遍历序列--九度OJ

    题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入: 每个测试案例包括2行: 第一行为1个整数 ...

  9. 一个序列是否可能是push序列的pop序列

    输入:两个序列A.B,A作栈的push序列,判断B是否可能是A的pop序列. #include<iostream> #include<stack> using namespac ...

随机推荐

  1. 漂亮灵活设置的jquery通知提示插件toastr

    toastr是一款非常棒的基于jquery库的非阻塞通知提示插件,toastr可设定四种通知模式:成功,出错,警告,提示,而提示窗口的位置,动画效果都可以通过能数来设置,在官方站可以通过勾选参数来生成 ...

  2. redis 和 bloom filter

    今天打算使用redis 的bitset搞一个 bloom filter, 这样的好处是可以节省内存,坏处是可能在会有一些数据因为提示重复而无法保存. bloom filter 的大体原理就是通过不同的 ...

  3. duilib中的V和H布局中滚动条问题

    转自博客:http://blog.csdn.net/damingg/article/details/41149037 首先看一段xml代码 [html] view plaincopy <?xml ...

  4. 几种常见的FTP软件的二进制设置说明

    几种常见的FTP软件的二进制设置说明: 1.FlashFXP: 打开 FlashFXP:在工具栏中,选项 => 参数(也可以直接按F6键),在弹出来的窗口中,选择“传输(T)”卡,在传输模式中选 ...

  5. convert source code files to pdf format in python

    import os import sys def find_file(root_dir, type): dirs_pool = [root_dir] dest_pool = [] def scan_d ...

  6. HDU4864:Task(贪心)

    题意: 给出n个机器和m个任务,对于一天来说,每个机器有最大工作时间xi,可接受最大等级yi,每个任务有一个工作时间xi,一个等级yi,可获价值为500*xi+2*yi,任务需要在一台机器一天内完成, ...

  7. 基于Node.js的实时推送 juggernaut

    基于Node.js的实时推送 juggernaut Juggernaut 基于 Node.js 构建.为浏览器和服务器端提供一个实时的连接,可在客户端和服务器端进行数据的实时推送,适合多角色游戏.聊天 ...

  8. Hibernate之基于外键映射的一对一(1-1)关联关系

    1.对于基于外键的1-1关联,其外键可以存放在任意一边,在需要存放外键一端,增加many-to-one元素.为many-to-one元素增加unique="true"属性来表示为1 ...

  9. 使用bootstrap的html文件转换成jsp…

    问题:使用bootstrap的html文件转换成jsp时表单高度变窄 解决方法: 将jsp中html文档类型修改为<!DOCTYPE html> 问题即可解决. 也就是bootstrap只 ...

  10. javascript中数组的迭代等操作