您的位置:首页 > 职场人生

【面试题】剑指offer22-判断一个序列是否是某一个栈的序列

2017-06-30 16:40 253 查看
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出序列。

假设压入站的所有数字均不相等。

例如序列1,2,3,4,5是某站的压栈序列,序列4,5,3,2,1是该压栈序对应的一个弹出序列,但是4,3,5,2,1

就不是该压栈序列的弹出序列。

解决这个问题,我们需要一个辅助栈,把输入第一个序列的数字依次压入该辅助栈,并按照第二个序列

的顺序依次从该栈中弹出数字。

代码的实现:

#include<iostream>
using namespace std;
#include<assert.h>
#include<stack>

bool IsPopOrder(const int* pPush, const int* pPop, size_t length)
{
assert(length);
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)
{
if (NextPush - pPop == 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
相关文章推荐