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

面试题22:栈的压入,弹出系列

2016-07-01 17:52 351 查看
      题目:输入两个整数序列。第一个序列表示栈的压入顺序,请判断第二个序列是否是栈的弹出顺序。假设压入栈的所有数字均不相等。例如1,2,3,4,5是某栈的压入序列,序列4,5,3,2,1是该栈序列对应的一个弹出序列,但是4,3,5,1,2就不可能是该压栈的弹出序列。

      看到该题目开始想的是用一个栈去实现。思路也是对的,但是思路出来了代码没写出来,各种错误,心里很急躁啊,静不下心来调,只有看书上代码了。

      思路是:设定一个栈,现将第一个序列依次入栈,如果栈顶元素是第二个栈的要弹出的元素,就直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的数字压入栈,直到下一个需要弹出的数字压入栈顶为止。如果所有的 数字都压入栈中,此时还没有弹出,则,不可能是一个弹出序列。

       代码如下:

       class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
bool bPossible=false;
if(pushV.size()!=popV.size())
return bPossible;
int len=pushV.size();
stack<int> st;
int i=0,j=0;
if(len>0)
{
while(j<len)
{
while(st.empty()||st.top()!=popV[j])
{
if(i==len)
break;
st.push(pushV[i]);
i++;
}
if(st.top()!=popV[j])
{
break;
}
st.pop();
j++;
}
if(st.empty()&&j==len)
bPossible=true;
}
return bPossible;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: