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;
            
        }
    }
    

    在这里插入图片描述

  • 相关阅读:
    matplotlib数据可视化之柱形图
    xpath排坑记
    Leetcode 100. 相同的树
    Leetcode 173. 二叉搜索树迭代器
    Leetcode 199. 二叉树的右视图
    Leetcode 102. 二叉树的层次遍历
    Leetcode 96. 不同的二叉搜索树
    Leetcode 700. 二叉搜索树中的搜索
    Leetcode 2. Add Two Numbers
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/itjiangpo/p/14181302.html
Copyright © 2011-2022 走看看