輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列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的值的後移...