zoukankan      html  css  js  c++  java
  • 栈三:栈的压入、弹出序列

    /**
     * 题目:栈的压入、弹出序列
     * 描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。
     *   例如序列1,2,3,4,5是某 栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
     *    (注意:这两个序列的长度 是相等的)
     *  注:
     *  1、pushA popA为空时直接返回false
     *  2、创建一个新的stack,将pushA压入stack,每压一个,做一次判断:是否与popA[j]相等,如果相等,将stack出栈,并j++
     *  3、最后如果stack为空,则返回true,反之返回false
     * 方案:  
     *   思路:先进行压栈,压入后与弹出序列递增进行比较,相同弹出,不相同保留,最后判断栈内是否还要元素。(可以在入栈的时候就进行判断,看是否和弹出序列的第一个相同)
     *   如果是该栈的弹出顺序,则下面的for循环中,先进行入栈操作,每次入栈都与弹出序列的第一个数字不相同,直到压入最后一个栈,与之相同,
     *    然后在while里面一次比较,如果有一个不相同,则保留栈内数字,最后栈内还有元素表示不是该栈的弹出序列,
     * */

    public class Three {
    
        public static boolean one(int[] push ,int pop[]) {
            
            if(push.length==0 || pop.length ==0) {
                return false;
            }
            Stack<Integer> stack = new Stack();
            
            for(int i =0,j=0;i<push.length;i++) {
                stack.push(push[i]);
                while(j<pop.length &&stack.peek() == pop[j] ) {  // 每次入栈判断是否和出栈第一个相同,如果相同了,直接出栈,比较出栈序列的第二个和入栈数字,会导致stack一直存放入栈的数据,stack不为空,表示不是该栈的
                    stack.pop();
                    j++;
                }
            }
            return stack.isEmpty()?true:false;
        }
    }
    天助自助者
  • 相关阅读:
    ARM装配说明MCR/MRC学习
    smark和openfire即时通信代码
    Bulk Insert具体订单
    Redis测井系统
    几种任务调度的 Java 实现方法与比较
    Android中Style和Theme的使用
    高仿优酷Android客户端图片左右滑动(自动切换)
    Android GridView 一行显示数据(包括图片和文本),解决的办法是计算数据占该行的宽度是多少
    为Android GridView 设置行背景
    Android利用Filter过滤数据
  • 原文地址:https://www.cnblogs.com/ZeGod/p/9969415.html
Copyright © 2011-2022 走看看