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