题目描述

  输入两个整数序列,第一个序列表示栈的压入书序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相同。例如1、2、3、4、5是某栈的压入序列,序列5、4、3、2、1是该栈对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。

基本思路

  设置两个索引pushIndex和popIndex,分别用于记录入栈元素的处理位置和出栈元素的处理位置,设置一个循环,当入栈元素还未全部入栈的条件下,如果栈为空,或者栈顶的元素不与当前处理的元素相等,则一直进行入栈操作,直到入栈元素全部入栈或者找到一个与栈顶元素相等的元素。如果在上一步入栈过程中找到了与出栈与出栈元素相等的元素。将元素出栈,处理下一个元素。如果没有找到与出栈元素相等的元素,说明这个出栈顺序是不合法的,就返回false。

Java代码

package com.swordOffer.stackPushPopOrder14;import java.util.Scanner;
import java.util.Stack;/*** Created by Feng on 2017/5/11.* 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。* 假设压入栈的所有数字均不相等。例如列1、2、3、4、5是某栈的压栈序列,序列5、4、3、2、1* 是该栈对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。*/
public class StackPushPopOrder {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {int n = sc.nextInt();//数组的大小int[] push = new int[n];//表示栈的压入顺序for (int i = 0; i < n; i++) {push[i] = sc.nextInt();}int[] pop = new int[n];//弹出顺序for (int i = 0; i < n; i++) {pop[i] = sc.nextInt();}boolean result = isPopOrder(push, pop);System.out.println(result);}}/*** 判断第二个序列是否为该栈的探春序列** @param push* @param pop* @return*/private static boolean isPopOrder(int[] push, int[] pop) {boolean flag = false;Stack<Integer> stack = new Stack<>();// 输入校验,参数不能为空,并且两个数组中必须有数字,并且两个数组中的数字个数相同// 否则返回falseif (push == null || pop == null || pop.length == 0 || push.length == 0|| push.length != pop.length) {return false;}// 用于记录入栈数组元素的处理位置int pushIndex = 0;// 用于记录出栈数组元素的处理位置int popIndex = 0;// 如果还有出栈元素要处理while (popIndex < pop.length) {// 入栈元素还未全部入栈的条件下,如果栈为空,// 或者栈顶的元素不与当前处理的相等,// 则一直进行栈操作,// 直到入栈元素全部入栈或者找到了一个与当出栈元素相等的元素while (pushIndex < push.length && (stack.isEmpty() ||stack.peek() != pop[popIndex])) {// 入栈数组中的元素入栈
                stack.push(push[pushIndex]);// 指向下一个要处理的入栈元素pushIndex++;}//如果在上一步的入栈过程中找到了与出栈的元素相等的元素if (stack.peek() == pop[popIndex]) {// 将元素出栈
                stack.pop();// 处理下一个出栈元素popIndex++;}// 如果没有找到与出栈元素相等的元素,说明这个出栈顺序是不合法的// 就返回falseelse {return false;}}return true;}
}

转载于:https://www.cnblogs.com/lfeng1205/p/6840265.html

剑指Offer之栈的压入、弹出序列相关推荐

  1. 【LeetCode】剑指 Offer 31. 栈的压入、弹出序列

    [LeetCode]剑指 Offer 31. 栈的压入.弹出序列 文章目录 [LeetCode]剑指 Offer 31. 栈的压入.弹出序列 package offer;import java.uti ...

  2. 【剑指offer-Java版】22栈的压入弹出序列

    栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序 思路:纯粹的模拟栈的压入和弹出顺序 分别遍历压栈序列seq1和另一个序列seq2 比较当前栈顶元素和seq2 ...

  3. 剑指offer:栈的压入、弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  4. 剑指OFFER之栈的压入、弹出序列(九度OJ1366)

    题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...

  5. 《剑指offer》-- 栈的压入与弹出序列、把字符串转化为整数、扑克牌顺子、孩子们的游戏(圆圈中最后剩下的数)

    一.栈的压入与弹出序列: 1.题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序. 假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序 ...

  6. 剑指offer(21):栈的压入、弹出序列

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应 ...

  7. 《剑指offer》栈的压入、弹出序列

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

  8. 剑指Offer 31 栈的压入、弹出序列

    栈的压入.弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2 ...

  9. java输出栈的弹出序列_剑指offer:栈的压入、弹出序列(Java)

    1.题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是 ...

最新文章

  1. python调用C函数库
  2. Linux学习笔记01
  3. mediumtext 长度_InnoDB表行长度超限问题的处理和思考
  4. word List 43
  5. 外部仓库_仓库主要作业流程和WMS作业优化方案
  6. javascript 之牛人感悟,必看学习
  7. ubuntu skill
  8. 与孩子一起学编程06章
  9. matlab仿真模糊PID控制,基于Matlab的模糊PID控制器的设计和仿真
  10. 如何使用solidworks对产品打螺孔--问题解决
  11. 又到一年清明时,又是一年踏春季
  12. Resize的使用————Transforms
  13. 手机通过页面调用摄相头或选择照片压缩后并显示
  14. vsftpd 虚拟用户
  15. kettle4.1 连接 mysql8 库异常:org.gjt.mm.mysql.Driver
  16. [Noip2003] 侦探推理
  17. 多线程 - voliate 关键字
  18. 腾讯云/阿里云域名申请SSL证书(https证书)SSL证书过期了
  19. u盘linux系统安装文件,使用U盘安装LINUX系统
  20. Dojo学习笔记一: 认识Dojo

热门文章

  1. TablePlus 3中文版
  2. Nginx详解五:Nginx基础篇之HTTP请求
  3. 一场面试,用20秒介绍自己顺便教训了领导
  4. 【java】解析JToolBar类的使用
  5. 11月29号例会记录
  6. 关于python2和python3除法的区别
  7. 在网页中JS函数自动执行常用三种方法
  8. POJ 2391 Ombrophobic Bovines 网络流 建模
  9. (winform cookie)如何向某网址Post信息,并得到CookieContainer以便以后直接通过验证...
  10. 狂潮微课表示-怎么做免费的百度爱采购推广