[剑指offer]面试题22:栈的压入、弹出序列

来源:互联网 发布:上古卷轴5优化补丁 编辑:程序博客网 时间:2024/06/08 07:56

这道题,我第一看到,觉得很简单,思路很清晰,例子运行的也很好,

但是到了自己写代码的时候出现很大问题了,自己不清楚具体该怎么写了。

特意将书上的代码贴在这儿,以备复习时用;

bool IsPopOrder(const int* pPush, const int* pPop, int nLength){    bool isPopOrder = false;    if(pPush != NULL && pPop != NULL && nLength > 0){        const int *pNextPush = pPush;        const int *pNextPop = pPop;        std::stack<int> tempStack;        while(pNextPop - pPop < nLength){            while(tempStack.empty() || tempStack.top() != *pNextPop){                if(pNextPush - pPush == nLength)                    break;                tempStack.push(*pNextPush);                pNextPush++;            }            if(tempStack.top() != *pNextPop)                break;            tempStack.pop();            pNextPop++;        }        if(tempStack.empty() && pNextPop - pPop == nLength)            isPopOrder = true;    }    return isPopOrder;}int main(){    int pPush[]={1,2,3,4,5};    int pPop[] = {4,5,3,2,1};    cout << IsPopOrder(pPush, pPop, sizeof(pPush)/sizeof(int)) << endl;    cout << endl;}

PS:复习的时候,东西看仔细些。


后记:这道题还有一种方法,space:O(n^2),空间复杂度:O(1)

0 0
原创粉丝点击