棧 佇列 31題 棧的壓入 彈出序列

2021-10-14 21:03:44 字數 1081 閱讀 5225

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

示例1:

輸入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]

輸出:true

解釋:我們可以按以下順序執行:

push(1), push(2), push(3), push(4), pop() -> 4,

push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

示例2:

輸入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]

輸出:false

解釋:1 不能在 2 之前彈出。

如下圖所示,給定乙個壓入序列pushed和彈出序列poped,則壓入/彈出操作的順序(即排序)是唯一確定的。

如下圖所示,棧的資料操作具有先入後出的特性,因此某些彈出序列是無法實現的。

考慮借用乙個輔助棧stack,模擬壓入/彈出操作的排列。根據是否模擬成功,即可得到結果。

由於題目規定棧的所有數字均不相等,因此在迴圈入棧中,每個元素出棧的位置的可能性是唯一的(若有重複數字,則具有多個可出棧的位置)。因而,在遇到「棧頂元素=彈出序列的當前元素」就應立即執行出棧。

class

solution

}return st.

isempty();}}

複雜度分析:

31 棧的壓入 彈出序列

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

31 棧的壓入 彈出序列

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

棧 面試題31 棧的壓入 彈出序列

我們使用乙個棧stack來模擬該操作。按照 popped 中的順序模擬一下出棧操作,如果符合則返回 true,否則返回 false。這裡用到的貪心法則是如果棧stack的棧頂元素stack.peek popped 序列中下乙個要 pop 的值,則應立刻將該值 pop 出來。最後檢查棧是否為空。cla...