【牛客网】JZ31.栈的弹出,压入序列-CSDN博客

37 阅读1分钟

栈的弹出,压入序列

题目

在这里插入图片描述

思路

  1. 定义两个标记指针i,j i 指向压入序列 j 指向弹出序列
  2. 每次压栈后 peek栈顶元素 如果等于j指向的元素 则pop栈顶元素
  3. 如果栈中没有元素 且压入序列中所有元素都已经被压入过栈 则表示弹出序列是正确的 反之则错误

代码

import java.util.*;

public class Solution {
    public boolean IsPopOrder(int [] pushA,int [] popA) {
        Stack<Integer> stack = new Stack<>();
        //栈用来存放插入序列
        int j = 0;
        for(int i = 0; i < pushA.length; i++){
            stack.push(pushA[i]);
            每次循环压入一个插入序列的数
            while(!stack.empty() && j < pushA.length 
            && stack.peek() == popA[j]){
            //循环条件第一个保证栈中有元素
            //第二个条件保证j不会越界
            //第三个条件保证 栈顶元素和j指向的元素相同
                stack.pop();
                //弹出栈顶元素
                j++;
                //指针向后偏移指向下一个
            }
        }
        return stack.empty();
        //如果栈为空 返回true 否则返回false
    }
}