zoukankan      html  css  js  c++  java
  • 关于栈的经典问题---判断一个栈的出栈序列是不是有效的

    问题

    给出一个入栈序列,给出一个出栈序列,判断出栈序列是不是合法的。
    举个例子:1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(因为2入栈的时候在1的上面,所以出栈的时候2先出)

    分析

    先创建一个临时栈,比较临时栈中的栈顶元素和出栈序列的第一个元素是否相等,如果不相等,那我就向临时栈中添加元素,添加的元素是根据入栈顺序添加的;如果相等,将临时栈的当前元素pop,并且将出栈序列的下标后移一位(i++)。最后如果栈中还有元素代表出栈序列不合法,如果临时栈中没有元素代表出栈序列合法。

    代码实现

    import java.util.Stack;
    
    public class Solution {
        public boolean IsPopOrder(int [] pushA,int [] popA) {
          if(pushA.length!=popA.length){
              return false;
          }
            int p=0;
          Stack<Integer> stack = new Stack<>();
            for(int i=0;i<pushA.length;i++){
                //临时栈开始是空的,所以先添加元素
                stack.push(pushA[i]);
                //如果临时栈不为空,并且临时栈的栈顶元素和出栈序列中的当前元素相等,那就将栈顶元素出栈,出栈序列数组下标++
                while(!stack.empty()&&stack.peek()==popA[p]){
                    stack.pop();
                    p++;
                }
            
            }
            return stack.empty(); //或者p==pushA.length;
            
        }
    }
    

    在这里插入图片描述

  • 相关阅读:
    HDU4366 Successor 线段树+预处理
    POJ2823 Sliding Window 单调队列
    HDU寻找最大值 递推求连续区间
    UVA846 Steps 二分查找
    HDU3415 Max Sum of MaxKsubsequence 单调队列
    HDU时间挑战 树状数组
    UVA10168 Summation of Four Primes 哥德巴赫猜想
    UESTC我要长高 DP优化
    HDUChess 递推
    HDU4362 Dragon Ball DP+优化
  • 原文地址:https://www.cnblogs.com/itjiangpo/p/14181302.html
Copyright © 2011-2022 走看看