《劍指offer》之棧的壓入 彈出序列

2021-10-02 14:40:11 字數 1331 閱讀 9338

我們關於棧的題目,這兩天做的還是挺多的,無非就是壓棧出棧。

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)

輸入兩個陣列,第乙個是入棧的順序,第二個是出棧的順序,判斷第二個陣列出棧的順序是否正確。

比如入棧:1,2,3,4,5

那齣棧:5,4,3,2,1 可以

4,5,3,2,1也可以。

4,5,3,1,2就不行。

所以我們遍歷第二個陣列,找到在第乙個陣列找中的位置,這樣在這之前的都先入棧,然後出棧。最後棧內容為空則表示,出棧的順序是可以的,否則就不行。

具體例子說明,比較清楚。

比如list1:

list2:{4,5,3,2,1}

先遍歷陣列list2

第乙個為4,找到在list1 中的位置為3記錄下來,將前面的數字都入棧。這時棧中的資料為1->2->3->4

然後出棧4,此時棧的資料為1->2->3。

第二個為5,找到在list1 中為4大於3 ,位置為4記錄下來,所以將list1 中的3+1 到4的資料壓入棧中,即將5壓入棧,此時棧的資料為:1->2->3->5

然後出棧5,此時棧的資料為1->2->3

第三個為3,此時在list1 中的位置為2小於4,等於3,直接出棧。此時棧的資料為1->2

第四個為2,此時在list1 中的位置為1小於4,等於2,直接出棧。此時棧的資料為1

第四個為1,此時在list1 中的位置為0小於4,等於1,直接出棧。此時棧的資料為空

所以說明list2 是一種出棧方式。

public boolean ispoporder(int  pusha,int  popa) 

int temp=-1;

for(int i=0;imain 方法

劍指offer之棧的壓入 彈出序列

時間限制 1秒 空間限制 32768k 熱度指數 145390 本題知識點 棧 題目描述 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列...

劍指offer之 棧的壓入,彈出序列

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 ...

劍指offer 棧的壓入 彈出序列

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。分析 用乙個輔助棧模擬壓入彈出操作,...