輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)這個題目要求給定兩個等長序列,第乙個為元素進棧的順序序列,第二個是元素出棧的順序序列,判斷出棧順序序列是否匹配進棧順序序列。
這種型別的題目一般出現在選擇題較多,而且規律也很簡單。
1.先找到出棧序列首位元素在進棧序列中的索引值(也就是這個元素是第幾個進棧的);
2.出棧序列中進棧順序比1中的首位元素的進棧順序靠後的元素不用考慮,必定可以滿足;
3.出棧序列中進棧順序比1中首位元素進棧順序靠前的元素按照出棧序列中的排序順序依次與前乙個元素進行比較,如果其進棧順序之差不等於1,便可判定該出棧序列與進棧序列不匹配。
# -*- coding:utf-8 -*-
class
solution
:def
ispoporder
(self, pushv, popv)
:# write code here
if pushv ==
or popv ==
:return
false
# 如果進棧序列和出棧序列包含的元素不同則不匹配
ifsorted
(pushv)
!=sorted
(popv)
:return
false
order =
while popv:
# 按順序依次遍歷出棧序列的元素
temp = popv.pop(0)
cur = pushv.index(temp)
# 獲取該元素的進棧順序
ifnot order or cur < order[0]
:iflen(order)
>=2:
if order[-2
]- order[-1
]!=1:
# 將當前元素的進棧順序與其在出棧序列中的前乙個元素的進棧順序比較
return
false
return
true
劍指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就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的...