• 栈的压入、弹出序列


    来源:牛客网 《剑指offer》

    题目描述

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

    pushA={1,2,3,4,5}

    popA={4,5,3,1,2}

    popB={4,3,5,1,2}

    先看popA,第一个是4,因此需要先将1,2,3,4都入栈,然后弹出4,此时top=3. 下一个是5,不等于top,因此需要把pushA中的下一个元素入栈,然后比较新的是否等于5. 若等于,则出栈;若不等于,则继续从pushA中将数字压栈。终止条件是栈为空或pushA数组遍历完成了。

     1 public boolean IsPopOrder(int [] pushA,int [] popA) {
     2         if (pushA.length==0 || popA.length==0) return false;
     3         if (pushA.length!=popA.length) return false;
     4 
     5         Stack<Integer> stack = new Stack<Integer>();
     6         stack.push(pushA[0]); // autoboxing
     7 
     8         for(int i=1, j=0; ;){
     9             if(stack.empty()) return true;
    10             if(!stack.empty() && stack.peek()!=popA[j]){ // unboxing
    11                 if(i==pushA.length) break;
    12                 stack.push(pushA[i]);
    13                 i++;
    14             } else if(!stack.empty() && stack.peek()==popA[j]) {
    15                 stack.pop();
    16                 j++;
    17             }
    18         }
    19 
    20         return false;
    21     }
  • 相关阅读:
    施密特触发器
    51单片机独立键盘原理
    51单片机独立键盘原理
    hdu3085 Nightmare Ⅱ
    hdu3085 Nightmare Ⅱ
    复制一颗二叉树
    复制一颗二叉树
    判断一颗二叉树是不是完全二叉树
    判断一颗二叉树是不是完全二叉树
    求二叉树的深度及每一个节点的深度
  • 原文地址:https://www.cnblogs.com/duanguyuan/p/5702110.html
Copyright © 2020-2023  润新知