題目:輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否爲該棧的彈出順序。假設壓入棧的全部數字均不相等。例如序列1,2,3,4,5是某棧的壓棧序列,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不多是該壓棧序列的彈出序列。ios
思路:先看彈出序列,拿例子說:要先彈出4,因此根據壓棧序列看,1,2,3都已經在棧中,而後4在棧頂,彈出。就是先對比壓入棧的棧頂元素,若是相同則彈出,不一樣則查看是否存在於未壓入的元素中。spa
#include<iostream> #include<stack> using namespace std; bool IsPopOrder(const int* pPush, const int* pPop, int nLength) { bool bPossible = false; if (pPush != NULL && pPop != NULL && nLength > 0) { const int* pNextPush = pPush; const int* pNextPop = pPop; stack<int>stackData; while (pNextPop - pPop < nLength) { while (stackData.empty() || stackData.top() != *pNextPop) { if (pNextPush - pPush == nLength) { break; } stackData.push(*pNextPush); pNextPush ++ } if (stackData.top() != *pNextPop) { break; } stackData.pop(); pNextPop ++; } if (stackData.empty() && pNextPop - pPop == nLength) { bPossible = true; } } return bPossible; }