输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
下面给出两种解答方法
bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
int n=pushV.size();
int count=0;
stack<int> stk;
for(int i=0;i<n;i++)
{
if(pushV[i]==popV[count])
{
count++;
continue;
}
while(!stk.empty()&&stk.top()==popV[count])
{
stk.pop();
count++;
}
stk.push(pushV[i]);
}
while(!stk.empty())
{
if(stk.top()!=popV[count])
{
return false;
}
stk.pop();
count++;
}
return true;
下面是第二种方法
bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
// write code here
vector<int> mystack;
int j=0;
for(int i=0;i<pushV.size();i++){
mystack.push_back(pushV[i]);
while(mystack.size()>0&&mystack.back()==popV[j]){
j++;
mystack.pop_back();
}
}
return mystack.empty();
}