劍指Offer 31棧的壓入彈出序列(C 版)

2021-09-12 06:48:24 字數 1476 閱讀 7804

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

個人解題思路:先用vector容器儲存兩個序列的值,然後將壓棧序列的值乙個個的壓入stack中,每壓入乙個值就要進行一次判斷是否為彈出序列的第乙個值,如果是,將當前stack的棧頂元素pop(刪除)掉,再判斷新的棧頂元素是否為彈出序列的第二個值,依次類推。

直到把所有的壓入序列都push(壓進)進stack一次後,判斷是否為空棧,如果是,說明第二個序列為正確的彈出序列,否則為錯誤的彈出序列。

以 上面兩個為例設壓入序列為1,2,3,4,5 彈出序列為4,5,3,2,1

第一次:壓入1 與彈出序列 第乙個 值4不相同 跳過

第二次:壓入2 與彈出序列第乙個 值 4不相同 跳過

第三次:壓入3 與彈出序列 第乙個 值4不相同 跳過

第四次:壓入4 與彈出序列 第乙個 值4相同  將壓入stack的4 pop(刪除)掉,棧頂元素變成了 3 與第二個彈出序列元素 5比較值不相同,跳過。

第五次,壓入5餘彈出序列 第二個值5相同 將壓入stack的5 pop(刪除)掉,棧頂元素變成了 3 與第三個彈出序列元素 3比較值相同,將壓入stack的3 pop(刪除)掉.....

最終,棧中沒有元素,確定彈出序列正確

第二例子, 設壓入序列為1,2,3,4,5 彈出序列為4,3,5,1,2

第一次:壓入1 與彈出序列 4 值不相同 跳過

第二次:壓入2 與彈出序列 4 值不相同 跳過

第三次:壓入3 與彈出序列 4 值不相同 跳過

第四次:壓入4 與彈出序列 4 值相同  將壓入stack的4 pop(刪除)掉,棧頂元素變成了 3 與第二個彈出序列元素 3  比較值相同,

將壓入stack的3 pop(刪除)掉, 棧頂元素變成了 2 與第三個彈出序列元素 5 比較不相同,跳過

第五次:壓入5 與彈出序列 5 值相同 將壓入stack的5 pop(刪除)掉,棧頂元素變成了 2,與 彈出序列 值 1 不相同 跳過

將所有的元素都壓進stack一次,最終stack中還剩下 2,1兩個元素,彈出序列錯誤

下面為**

#include "pch.h"

#include #include #include using namespace std;

bool judge(vectorvec_push, vectorvec_pop)

}if (anxi.empty())

return true;

return false;

}int main()

for (int i = 0; i < 5; i++)

if (judge(l, m))

}

如果有大佬能指出哪段錯誤,或者優化的地方,十分感謝。

劍指offer 31 棧的壓入 彈出序列

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

劍指offer 31 棧的壓入 彈出序列

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

劍指Offer 31 棧的壓入 彈出序列

題目輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。leetcode中也有相同的題目 驗證棧序列 解決思路 依次將第乙個序列的元素壓入棧中 判斷這個元素是不是第二個序列中的將要pop的值 如果是則從棧中彈出此元素,將要pop的值的後移...