输入两个整数序列。其中一个序列表示栈的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 test;
import java.util.Stack;
public class StackPopSeq {/*** 根据数字排列特性* 若a[i+1] > a[i],则a[i+1] 大于前面所有的数* 即,如果按小到大出来的数,必定是进去就出来,那么比它们还大的数,就不可能比他们还早出来* @param a* @return*/private static boolean isPopSeqByNO(int[] a) {boolean flag = true;int max = a[0];for(int i=1;i<a.length;i++){if(a[i-1]<a[i]&&a[i]<max){flag = false;break;}max = Math.max(Math.max(a[i-1],a[i]),max);}return flag;
}/*** 通过模拟栈的进出进行判断,* 先for循环把arr1中的元素入栈,并在每次遍历时,检索arr2中可以pop的元素。* 如果循环结束,而stack中还有元素,就说明arr2序列不是pop序列。* @param a1* @param a2* @return*/private static boolean isPopSeqBySimulate(int[] a1, int[] a2) {// TODO Auto-generated method stub
    Stack s = new Stack();for(int i=0,j=0;i<a1.length;i++){s.push(a1[i]);while(!s.empty()&&a2[j]==(int)s.peek()){s.pop();j++;}}return s.size()==0;}public static void main(String[]args){int []a1={1,2,3,4,5,6,7};int []a2={1,2,3,7,6,5,4};int []a3={1,2,3,7,5,6,4};System.out.println(isPopSeqBySimulate(a1,a2));System.out.println(isPopSeqBySimulate(a1,a3));System.out.println(isPopSeqByNO(a2));System.out.println(isPopSeqByNO(a3));}}

转载于:https://www.cnblogs.com/bendantuohai/p/4680814.html

判断出栈顺序是否正确(栈的压入、弹出序列)相关推荐

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

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

  2. python 栈的压入弹出序列

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

  3. 数据结构与算法--举例分析法- 栈的压入弹出序列

    举例分析 与上两篇问中画图方法一样,我们可以用举例模拟的方法思考分析复杂问题.当一眼不能看出问题的规律的时候,我们可以用几个具体的例子来模拟一下问题的过程.这样就和我们在程序出现问题时候的debug一 ...

  4. 剑指offer 31.栈的、压入弹出序列

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

  5. 剑指offer-21.栈的压入弹出序列

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

  6. 判断栈的出栈顺序是否正确

    一 问题描述:      两个数组pPush和pPop分别存储了压栈序列和出栈序列,如何判断出栈序列是否正确,假设元素不重复.      需要实现的函数: bool isStackOutRight(i ...

  7. java判断出栈顺序,java判断出栈顺序是否正确

    java判断出栈顺序是否正确 我们知道栈是一种先进后出的数据容器.当一个栈的输入序列是递增序列(例如a,b,c,d),并且在进栈操作时,允许退栈操作,则输出的序列可能有多种形式(例如:d,c,b,a或 ...

  8. 023 判断出栈顺序是否正确

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

  9. java一个界面用另一个界面的值_如何将参数/值从一个弹出窗口传递到Angular2中的另一个弹出窗口...

    我在Angular2中有一个要求,我需要打开第一个弹出窗口,用户会输入一些值 . 在某些用户事件(即按钮单击)上,我需要关闭该弹出窗口并打开另一个弹出窗口,其中包含用户在第一个弹出窗口中输入的值 . ...

最新文章

  1. Apache Hook机制解析(下)——实战:在自己的代码中使用Apache的钩子
  2. linux命令之高级使用 find
  3. nginx 配置两个域名
  4. Charles是Mac的Fiddler抓包工具
  5. eclipse中多个工程编译到同一个目录下
  6. QT的QTreeWidgetItem类的使用
  7. Sublime Text for Windows的快捷键
  8. java线程的5个使用技巧
  9. python wechatpay微信支付回调_【微信支付】JSAPI支付开发者文档
  10. 程序员|那天下班回家,突然民警叫住我....
  11. 把人工智能、机器学习、深度学习串一串,串一个同心圆
  12. WP Condition:wordpress的性能监测
  13. c 数组上限_高级I/O复用技术:Epoll的使用及一个完整的C实例含代码
  14. 《Fluid Engine Development》 学习笔记3-光滑粒子流体动力学
  15. 关于Mysql修改密码的方法汇总
  16. 如何从一个USB上安装Windows Vista
  17. Java流(Stream)、文件(File)相关功能 ——菜鸟教程
  18. 定时任务时间表达式的规则
  19. 权限设计,可控制每个接口的使用。
  20. 关于金仓数据库的java连接问题

热门文章

  1. linux远程开机windows,从Linux到Windows的PowerShell远程处理
  2. 同源策略禁止读取位于_用浏览器缓存绕过同源策略(SOP)限制
  3. 樊登高效休息法读书心得_《读懂一本书:樊登读书法 》作者:樊登
  4. android 数据库索引,SQLite数据库提供警告自动索引(列)升级Android L后
  5. vba与MySQL交互_Excel、VBA与MySQL交互
  6. 用C语言编写万年历6,C语言编写万年历
  7. java swing 架构_Java Swing1 基本框架
  8. python语言入门r_小结:jieba分词的Python与R语言基础用法介绍
  9. Python 比较俩张图片差异
  10. python操作word文档(python-docx)