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