【面试题】剑指Offer-22-栈的压入和弹出序列
2017-03-23 10:34
337 查看
题目概述
输入两个整数的序列,第一个序列表示入栈的顺序,判断第二个序列是否为该栈的弹出顺序比如1、2、3、4、5 , 序列45321就是该栈序列对应的一个弹出序列,但是43512就不可能是
解决思路
用一个辅助的栈把输入的第一个序列的数字依次压入栈中,并按照第二个序列的出栈顺序依次出栈
合法序列举例
非法序列举例
代码实现
#include<iostream> using namespace std; #include<assert.h> #include<stack> //面试题22-栈的压入和弹出序列 bool IsPopOrder(const int* pPush,const int* pPop, size_t length) { assert(length);//大于0 assert(pPush && pPop); bool possible = false; const int* NextPush = pPush; const int* NextPop = pPop; stack<int> s; while (NextPop - pPop < length) { //当栈为空或者栈顶元素不为需要出栈的元素时,入栈 while (s.empty() || s.top() != *NextPop) { //如果入栈序列没有元素,break跳出 if (NextPush - pPush == length) break; s.push(*NextPush); NextPush++; } if (s.top() != *NextPop) break; s.pop(); NextPop++; } if (s.empty() && NextPop - pPop == length) possible = true; return possible; }
相关文章推荐
- 剑指offer 面试题22 栈的压入弹出序列
- 剑指offer面试题 22 栈的压入、弹出序列的匹配
- 剑指 offer面试题22 栈的压入和弹出序列
- 剑指offer-面试题22-栈的压入、弹出序列
- 剑指offer——面试题22:栈的压入和弹出序列
- 【剑指offer】面试题22:栈的压入弹出序列
- 剑指offer 面试题22 栈的压入、弹出序列
- 【剑指offer】4.3举例让抽象问题具体化——面试题22:栈的压入、弹出序列
- 剑指offer-4-面试题22:栈的压入、弹出序列
- [剑指offer]面试题22:栈的压入、弹出序列
- 剑指offer_面试题22_栈的压入、弹出序列(总结规律)
- 剑指offer之面试题22:栈的压入、弹出序列
- 剑指Offer_面试题22_栈的压入弹出序列
- 剑指offer——面试题22:栈的压入、弹出序列
- 剑指offer--面试题22:栈的压入、弹出序列--Java实现
- 剑指Offer:面试题22——栈的压入,弹出序列(java实现)
- 【剑指offer】面试题22:栈的压入、弹出序列
- 剑指offer之面试题22:栈的压入、弹出序列
- 剑指Offer-面试题22:栈的压入、弹出序列
- 【剑指Offer学习】【面试题22:栈的压入、弹出序列】