劍指T31 棧的壓入 彈出序列

2021-08-16 17:15:00 字數 1251 閱讀 1786

題目:

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

特點:化抽象為具體

過程分析:根據棧的特點:先入後出。首先建立乙個輔助棧stackdata,根據壓入序列pushv,每將乙個整數壓入輔助棧stackdata時,與彈出序列popv做比較,如果不等,繼續壓入;如果相等,則彈出此時的棧頂元素stackdata.pop()。

終止條件:輔助棧為空且同時pushv全部壓入過棧(設定計數變數)。

魯棒性:輸入序列非空,兩個序列長度相等。

#include#include#includeusing namespace std;

class solution

else

break;

}if (stackdata.top() != popv[i])

break;

stackdata.pop();

}if (stackdata.empty() && ppush == pushv.size())

bpossilble = true;

return bpossilble;

}};

根據模板類vector的特點,此處可以通過直接引用其public函式來獲得序列的個數,故採用for迴圈。

#include#include#includeusing namespace std;

class solution {

public:

bool ispoporder(const int *ppush,const int *ppop,int nlength)

{ bool bpossible = false;

if (ppush!=nullptr&&ppop!=nullptr&&nlength>0)

{ const int *pnextpop = ppop;

const int *pnextpush = ppush;

stackstackdata;

while (pnextpop-ppop

劍指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的值的後移...