您的位置:首页 > Web前端

剑指offer:栈的压入,弹出序列

2017-06-20 21:04 288 查看
剑指offer:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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) {
if(pushV.empty()||popV.empty()) return false;
vector<int> vec;
int j=0;
for(int i=0;i<pushV.size();i++){
vec.push_back(pushV[i]);//依次压入原栈到辅助栈
//当弹出栈,当前需要弹出的元素是栈顶元素时,直接弹出,然后继续弹出下一个,如果不是,则继续压栈
while(j<popV.size()&&popV[j]==vec.back()){
vec.pop_back();
j++;
}
}
return vec.empty();//最后辅助栈的所有元素必须弹出
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  剑指offer c++