栈的压入、弹出序列

来源:互联网 发布:mac 导入照片 位置 编辑:程序博客网 时间:2024/06/05 17:02

题目描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。

算法:
构造一个辅助栈
1)出栈数组的当前位如果和栈顶元素相同则判断出栈数组的下一个数。如果所有数都判断完,返回true。
2)如果不一致,则继续把入栈数组数据压栈。
3)如果不一致,并且入栈数组都已压栈,则返回false。

代码:
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
int pushsize = (int)pushV.size();
int popsize = (int)popV.size();
if(pushsize == 0 || popsize == 0)
return false;
stack<int> sk;
int j = 0;
sk.push(pushV[j]);
j++;
for (int i = 0; i < popsize; i++) {
if(sk.top()==popV[i]){
sk.pop();
}
else{
if(j<pushsize){
sk.push(pushV[j]);
j++;
}
else{
return false;
}
i--;
}

}
return true;
}
};
0 0
原创粉丝点击