面试题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;
}
};
看到该题目开始想的是用一个栈去实现。思路也是对的,但是思路出来了代码没写出来,各种错误,心里很急躁啊,静不下心来调,只有看书上代码了。
思路是:设定一个栈,现将第一个序列依次入栈,如果栈顶元素是第二个栈的要弹出的元素,就直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的数字压入栈,直到下一个需要弹出的数字压入栈顶为止。如果所有的 数字都压入栈中,此时还没有弹出,则,不可能是一个弹出序列。
代码如下:
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;
}
};
相关文章推荐
- 海量数据处理-面试题
- 面试题6:重建二叉树(根据前序和中序)
- 面试官在面试时让我去破解一个软件,我成功了
- 一位码农写给老婆的代码
- iOS面试题 -总结 ,你的基础扎实吗?
- android 面试题收集
- java程序员从笨鸟到菜鸟系列
- 一篇非常不错的前端面试文章
- Java程序员面试宝典——重要习题整理
- Servlet的文件上传
- 10个经典的 Java main 方法面试题
- java面试题(4)
- sql面试
- 软件开发人员面试问题(经典)
- java面向对象面试题(3)
- 面试题5:从尾到头打印链表
- 记录网址
- 顺丰科技数据库中间件研发工程师面试经历
- 程序员为省饭钱 黑进餐馆系统办“永久饭票”
- 数据库常见笔试面试题