題目描述
輸入兩個整數序列,第一個序串列示堆疊的壓入順序,請判斷第二個序列是否可能為該堆疊的彈出順序,假設壓入堆疊的所有數字均不相等,例如序列1,2,3,4,5是某堆疊的壓入順序,序列4,5,3,2,1是該壓堆疊序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓堆疊序列的彈出序列,(注意:這兩個序列的長度是相等的)
解題思路
題目給出的兩個序列是相等長度的,所以這里我們只需要判斷長度是不是0了;
然后,我們就可以充分的利用堆疊的特性,
1.將pushA中的元素壓入,當然一個一個壓入,
2.壓入一個就判斷,堆疊頂元素是不是popA 中元素,也是從第一個判斷,要是相等就出堆疊,然后判斷popA 的第二個元素,依次將popA的元素判斷完,
3.然后進行下一輪的壓入回圈,
4.最后堆疊不為空就是False;
代碼示例
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public boolean IsPopOrder(int [] pushA,int [] popA) {
if(pushA.length==0){
return false;
}
Stack<Integer> s = new Stack<>();
int j = 0;
for (int i = 0; i < pushA.length; i++) {
s.push(pushA[i]);
while (!s.isEmpty() && s.peek() == popA[j]){
s.pop();
j++;
}
}
return s.isEmpty();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275882.html
標籤:其他
上一篇:STL基本概念
