劍指offer 棧的壓入 彈出序列

2021-10-03 16:59:14 字數 1328 閱讀 5715

題目描述:

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

解答如下:

環境: python 2.7.3

本題在資料結構一書**現過,判斷彈出順序是否合理,本題用stack棧作為臨時空間,按照彈出序列popv的彈出順序把pushv中的元素壓入stack,比如測試序列1的第乙個元素是4,則把pushv的1到4壓入stack,然後迴圈匹配stack和popv[index]的值(index從0開始),如果stack沒有被全部匹配而清空(匹配成功的stack棧頂元素會被pop)並且stack[-1]和popv的index處的元素相匹配,則檢測popv的下乙個元素和新的stack[-1]。如果不匹配或者stack清空了,那麼向stack壓入pushv的下乙個元素,直到pushv被全部壓入,如果最後pushv都被壓入完了並且stack被清空了,則說明全部匹配成功,測試序列是合法的彈出順序,否則測試序列不是正確的彈出序列。

#首先要有乙個棧,列表。

#按照pushv的方式壓入棧

#彈出的時候需要迴圈判斷是否需要彈出

#判斷需要彈出的情況的條件,壓入棧的頂部是否和彈出棧的頂部相等

if pushv ==

orlen

(pushv)

!=len

(popv)

:return

none

stack =

index =

0for item in pushv:

while stack and stack[-1

]== popv[index]

: stack.pop(

) index +=

1if stack ==

:return

true

else

:return

false

劍指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就不可能是該壓棧序列的彈出序列。思路 解決這個問題很直觀地想法...

劍指offer 棧的壓入 彈出序列

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