棧的壓入 彈出序列(C 中等區)

2021-10-09 22:42:55 字數 1039 閱讀 8605

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

示例 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 之前彈出。

由於題目給定了壓入和彈出的陣列序列,所以他們的壓入和彈出順序是確定了的。因為棧的特性是先入後出的規則,所以我們根據給定的壓入序列來判斷彈出序列是否滿足這一特性,滿足返回true,不滿足則返回false。

因此我們借助乙個輔助棧來模擬資料的壓入和彈出操作。

演算法流程:我們先將pushed 元素入棧到輔助棧中,同時判斷該元素是否能匹配上 popped 元素。通過while尋來來判斷,每匹配乙個就出棧乙個,直到不能匹配,然後就接著入棧。就這麼維持著乙個動態的入棧出棧程序,直到 pushed 元素全部入棧了,也判斷完是否能全部匹配了,如果此時輔助棧為空,返回true;若輔助棧非空,則返回false。

**如下:

class

solution

}return s.

empty()

;}};

執行用時:20 ms, 在所有 c++ 提交中擊敗了54.64

%的使用者

記憶體消耗:14.8 mb, 在所有 c++ 提交中擊敗了94.18

%的使用者

C 棧的壓入 彈出序列

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出序列。假設壓入棧的所有數字均不相等。例如 序列是某棧的壓棧序列,序列是該壓棧序列對應的乙個彈出序列,但就不可能是該壓棧序列的彈出序列。解決該問題需要借助乙個輔助棧,把輸入的第乙個序列中的數字依次入棧,並按照第二個序列的順序...

棧的壓入 彈出序列 c

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

棧的壓入彈出序列

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