P134、面试题22:栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该栈序列的弹出序列。
package com.yyq; import java.util.Stack; /**
* Created by Administrator on 2015/9/16.
*/
public class StackPushPopOrder {
public static boolean isPopOrder(int[] pPush, int[] pPop){
boolean bPossible = false;
if (pPop == null || pPush == null)
return bPossible;
int pslen = pPush.length;
int polen = pPop.length;
int i = 0;
int j = 0;
Stack<Integer> stackData = new Stack<>();
if (pPush != null && pPop != null && pslen == polen && pslen > 0){
while(i < polen){
while ((stackData.empty() || stackData.peek() != pPop[i]) && j < pslen){ //如果存在相同的数据那又怎么处理呢?
stackData.push(pPush[j]);
j++;
}
if (stackData.peek() != pPop[i])
break;
stackData.pop();
i++;
}
if (stackData.empty() && i == polen)
bPossible = true;
}
return bPossible;
} // ====================测试代码====================
public static void Test(String testName, int[] pPush, int[] pPop, boolean expected)
{
if(testName != null)
System.out.println(testName+" begins: ");
if(isPopOrder(pPush, pPop) == expected)
System.out.println("Passed.");
else
System.out.println("failed.");
System.out.println();
} public static void Test1()
{
int push[] = {1, 2, 3, 4, 5};
int pop[] = {4, 5, 3, 2, 1};
Test("Test1", push, pop, true);
} public static void Test2()
{
int push[] = {1, 2, 3, 4, 5};
int pop[] = {3, 5, 4, 2, 1};
Test("Test2", push, pop, true);
} public static void Test3()
{
int push[] = {1, 2, 3, 4, 5};
int pop[] = {4, 3, 5, 1, 2};
Test("Test3", push, pop, false);
} public static void Test4()
{
int push[] = {1, 2, 3, 4, 5};
int pop[] = {3, 5, 4, 1, 2}; Test("Test4", push, pop, false);
} // push和pop序列只有一个数字
public static void Test5()
{
int push[] = {1};
int pop[] = {2}; Test("Test5", push, pop, false);
} public static void Test6()
{
int push[] = {1};
int pop[] = {1}; Test("Test6", push, pop,true);
} public static void Test7()
{
Test("Test7", null, null, false);
} public static void main(String[] args){
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
Test7();
}
}
P134、面试题22:栈的压入、弹出序列的更多相关文章
- 剑指offer-面试题22.栈的压入,弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第 二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1 是该压栈 ...
- 【剑指offer】栈的压入弹出序列,C++实现(举例)
原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为第一个序列的出栈序列.注意 ...
- 剑指offer - 栈的压入弹出序列 - JavaScript
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 ...
- 剑指Offer20 栈的压入弹出序列是否正确
/************************************************************************* > File Name: 20_IsPopO ...
- 剑指Offer:面试题22——栈的压入,弹出序列(java实现)
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...
- 剑指 offer面试题22 栈的压入和弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- 剑指offer-栈的压入弹出序列21
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- 《剑指offer》面试题22—栈的压入、弹出序列
<程序员面试宝典>上也有经典的火车进站问题,类似. 如果12345是压栈顺序,序列45321可能是出栈顺序,但序列43512不可能. 规律:对序列中任意元素n,排在n后且比n小的元素一定是 ...
- 《剑指offer》面试题22 栈的压入、弹出序列 Java版
(输入两个整数序列,第一个序列是一串数字的压入顺序,判断第二个序列是否是该栈数字的弹出顺序.) 我的方法:压入序列是给定的,每一次弹出操作形成一个弹出序列的值,我们从前往后遍历弹出序列,每一次访问弹出 ...
- 剑指offer-面试题31-栈的压入弹出序列-栈
#include<iostream> #include<string.h> #include<algorithm> #include<cmath> #i ...
随机推荐
- c++中"endl"和"\n"的区别
看C++视频教程-范磊主讲(2.91G)视频搞懂了c++中"endl"和"\n"的区别. 学习笔记如下: c++中 换行符"endl"该符号 ...
- Poj 1328 / OpenJudge 1328 Radar Installation
1.Link: http://poj.org/problem?id=1328 http://bailian.openjudge.cn/practice/1328/ 2.Content: Radar I ...
- ubuntu grub配置
一.Grub 2包含如下几部分内容:1./boot/grub/grub.cfg 文件2./etc/grub.d/ 文件夹3./etc/default/grub 文件 二.配置和意义: 1.修改grub ...
- jquery.ajax中的ifModified参数的误解
原来以为ifModified是为了在AJAX请求是发送 If-Modified-Since头,让服务端返回304. 测试代码如下: $(function () { test(); window.set ...
- C 语言循环之break、continue
在C 编程的过程中,我们很多时候都会用到循环,但有时需要中途跳出整个循环,或跳过某一次循环,这时就需要用到break或continue,关于二者的使用很多书籍和博文都有很相近的说明,此处不做任何讲解, ...
- [原创] linux课堂-学习笔记-课程3.Linux目录结构介绍及内核与shell分析
一.目录说明 1.1 bin 一般用户,可执行的系统内置命令 1.2 sbin 系统管理员,可执行的系统内置命令 1.3 boot 启动文件目录,启动有关的文件都保存在此 1.4 dev 设备管理文件 ...
- htmlcleaner
String xpath = "//div"; Object[] myNodes = node.evaluateXPath(xpath); for (Object obj : my ...
- ES6学习笔记(十四)
1.Promise的含义 Promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了Prom ...
- WordPress非插件添加文章浏览次数统计功能
一: 转载:http://www.jiangyangangblog.com/26.html 首先在寻找到functions.php.php文件夹,在最后面 ?> 的前面加入下面的代码 func ...
- CentOS7下源码安装mysql5.6
目录 准备工作 运行环境 确认你的安装版本 下载mysql 安装mysql 准备安装环境 编译和安装 配置mysql 单实例配置 单实例配置方法 添加防火墙 ...