這篇文章主要介紹了關於php實現堆疊的壓入以及彈出序列,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
輸入兩個整數序列,第一個序列表示堆疊的壓入順序,請判斷第二個序列是否為該堆疊的彈出順序。假設壓入堆疊的所有數字均不相等。例如序列1,2,3,4,5
是某堆疊的壓入順序,序列4,5,3,2,1
是該壓棧序列對應的一個彈出序列,但4,3,5,1,2
就不可能是該壓棧序列的彈出序列。 (註:這兩個序列的長度是相等的)
時間限制:1秒 空間限制:32768K
解題思路
#程式碼如下
##<pre class="brush:php;toolbar:false;"><?php
function isPopOrder($pushValue, $popValue){
$stack = new SplStack;
$count = count($pushValue);
for ($i = 0, $j = 0; $i < $count; $i++) {
$stack->push($pushValue[$i]);
while (!$stack->isEmpty() && $stack->top() == $popValue[$j] && $j < $count) {
$stack->pop();
$j++;
}
}
return $stack->isEmpty();
}
var_dump(isPopOrder([1, 2, 3, 4, 5], [4, 5, 3, 2, 1]));</pre>
4,5,3,2,1第一次遍歷,明顯
1 不等於
4 繼續遍歷,遍歷4 次到輔助堆疊站的棧內元素為
1,2,3,4
#把輔助棧棧頂元素彈出,將待出棧元素變成
5
這時輔助棧的棧內元素為
1 ,2,3
3不等於待出堆疊元素
5 ,我們繼續遍歷把
5
剛好這時待出棧元素為
5 與棧頂元素相同,於是我們彈出棧頂元素,待出棧元素變成
3
2
,待出堆疊元素變成以上是php實作堆疊的壓入以及彈出序列的詳細內容。更多資訊請關注PHP中文網其他相關文章!