package cn.dzp.flyroc.offer; import java.util.Stack; public class IsPopOrderDemo { /*题目描述:输入两个整数序列,第一个序列表示压入顺序, 请判断第二个序列是否为该栈的弹出顺序。 * 假设压入栈的全部数字均不相等。 * 例如:1,2,3,4,5,是某栈的压入顺序, * 序列4,5,3,2,1是该压栈序列对应的一个弹出序列, * 但4,3,5,1,2就不多是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)*/ //思路:用栈来压入弹出元素,相等则出栈 /*实现步骤: * 1、定义两个push、pop数组 * 2、判断两个数组是否为空 * 3、定义一个栈 * 4、定义pop数组的索引值(用来判断出栈时的栈顶元素是否和pop数组的元素相等) * 5、遍历push数组 * 6、将元素压入到栈中 * 7、出栈*/ //代码实现 public boolean IsPopOrder(int[] arrPush, int[] arrPop){ //定义push和pop数组 if (arrPush == null || arrPop == null){ return false; } Stack<Integer> stack = new Stack<>(); //定义栈 int index = 0; //定义pop数组索引值 for (int i = 0; i < arrPush.length; i++){ //遍历push元素 stack.push(arrPush[i]); while(!stack.isEmpty() && stack.peek() == arrPop[index]){ stack.pop(); index++; } } return stack.isEmpty(); } }