zoukankan      html  css  js  c++  java
  • 判断栈的出栈序列是否正确

    问题

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

    分析

      (1)假设在出栈序列中当前元素出栈,那么位于它压栈序列中的后续元素不能出现这种情况(当前元素出栈,未出栈已出栈)——

      (2)实现:使用一个记录数组,记录压栈序列中元素是否出栈。

      

    code

       

    //当前元素出栈,该元素之前为出栈的元素,严格按照栈的规则出栈(先进后出)。
        //所有数字均不相等
        public boolean IsPopOrder(int [] pushA,int [] popA) {
            Map<Integer,Integer> map = new HashMap<Integer,Integer>(); //记录每个数字在pushA数组中的位置
            for(int i=0;i<pushA.length;i++) {
                map.put(pushA[i], i);
            }
            boolean dp[] = new boolean[pushA.length];  //出栈记录数组
            //当前出栈元素,往后搜索,不允许出现》先false,后true。
            for(int i=0;i<popA.length;i++) {
                Integer key = Integer.valueOf(popA[i]);
                if(!map.containsKey(key)) {    //元素不等,直接false、
                    return false;
                }
                int index = map.get(key);
                boolean flag=false;        //找到false的标志位
                for(int j=index+1;j<pushA.length;j++) {
                    if(!dp[j]) {
                        flag=true;
                    }
                    if(flag && dp[j]) {
                        return false;
                    }
                }
                dp[index] = true;
            }
            return true;
              
        }
  • 相关阅读:
    print 参数
    note
    action标签的属性说明
    Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'
    润乾报表
    javax.naming.NameNotFoundException: Name ZKING is not bound in this Context 的问题
    Myeclipse2013安装svn插件
    Myeclipse2013的优化设置
    Myeclipse解析.classpath文件
    Struts
  • 原文地址:https://www.cnblogs.com/dream-flying/p/12893666.html
Copyright © 2011-2022 走看看