剑指offer——判断是不是栈的弹出序列
2017-01-29 12:08
183 查看
设置一个辅助栈,如果下一个弹出的数字刚好是辅助栈顶数字,那么直接弹出。否则把压栈序列中还没有入栈的数字压入辅助栈,直到把需要出栈的数字压入栈顶为止。如果所有的数字都压入栈了仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列。
void 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; std::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 = false; } return bPossible; }
相关文章推荐
- 剑指Offer 1367 判断整数序列是不是二元查找树的后序遍历结果
- 判断一个数组是不是二叉搜索树的后序遍历序列——剑指offer
- 牛客网-剑指offer-21-栈的压入、弹出序列
- 剑指offer 二叉搜索树后续遍历序列 判断
- 剑指offer: 栈的压入、弹出序列
- 剑指offer第二十一题【栈的压入、弹出序列】c++实现
- 剑指offer(21)—栈的压入、弹出序列
- 剑指Offer--018-树的子结构(判断B树是不是A树的一颗子树)
- 剑指offer--栈的压入、弹出序列
- 【剑指offer-解题系列(21)】栈的压入、弹出序列
- 剑指Offer: (Java实现) 栈的压入、弹出序列
- 剑指Offer22:栈的压入、弹出序列
- 剑指offer22 栈的压入、弹出序列
- 剑指Offer面试题:20.栈的压入、弹出序列
- 剑指offer之面试题22:栈的压入、弹出序列
- 【剑指offer】数据结构 ——栈的压入、弹出序列(C++)
- 剑指offer面试题 22 栈的压入、弹出序列的匹配
- 剑指offer:栈的压入、弹出序列
- 【剑指offer】面试题22:栈的压入、弹出序列
- 【剑指offer 面试题22】栈的压入、弹出序列