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