zoukankan      html  css  js  c++  java
  • 剑指Offer:面试题22——栈的压入,弹出序列(java实现)

    题目描述:

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

    思路:

    遍历待测试序列,如果当前元素在栈顶,出栈即可,否则,查看是否所有待入栈元素已入栈,如是说明当前元素在栈里面但又不在栈顶,显然出栈顺序错误,若没入栈,则按顺序从待入栈集合中入栈直到栈顶元素是当前元素,出栈…

    代码:

        public boolean IsPopOrder(int [] pushA,int [] popA) {
    
            if(pushA == null || popA == null){
                return false;
            }
    
            int m = pushA.length;
            int n = popA.length;
    
            if(m == 0 || n == 0){
                return false;
            }
            Stack<Integer> s = new Stack<Integer>();
    
            int start = 0;
            for(int i = 0; i < n; i++){
    
    
                while(s.empty() || s.peek() != popA[i]){
    
                    if(start >= m){
                        return false;
                    }
                    s.push(pushA[start++]);
                }
    
                if(s.peek() != popA[i]){
                    return false;
                }
    
                s.pop();
            }
    
            return true;
    
        }
  • 相关阅读:
    用导数解决逗逼初三数学二次函数图像题
    NOIP 2014 pj & tg
    BZOJ 1004
    双参数Bellman-ford带队列优化类似于背包问题的递推
    emu1
    無題
    15 day 1代碼
    javascript quine
    线段树的总结
    Watering the Fields(irrigation)
  • 原文地址:https://www.cnblogs.com/wenbaoli/p/5655712.html
Copyright © 2011-2022 走看看