劍指offer-棧的壓入和彈出
阿新 • • 發佈:2018-12-11
21.棧的壓入和彈出
題目描述
輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)
解題思路:先建立一個棧,以及一個指標index,用這個棧來模擬壓入和彈出操作,按入棧順序將數進行壓棧,直到遇到第一個出棧元素,將其彈出,index++指標指向出棧的下一個位置,直到棧為空,若棧為空,則是彈出順序,否則不是。
public boolean IsPopOrder(int [] pushA,int [] popA) { if(pushA.length==0 || popA.length==0) return false; Stack<Integer> stack=new Stack<>(); int index=0; for(int i=0;i<pushA.length;i++) { stack.push(pushA[i]); while(!stack.isEmpty() && stack.peek()==popA[index]) { stack.pop(); index++; } } return stack.isEmpty(); }