//题目描述
//
//输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
#include<vector>
#include<iostream>
#include<stack>
using namespace std;
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
stack<int>stk=stack<int>();
int n=pushV.size();
if(n==0)return false;
int k=0;
for(int i=0;i<n;i++){
stk.push(pushV[i]);
while(!stk.empty()&&stk.top()==popV[k]){
k++;
stk.pop();
}
}
return stk.empty();
}
};
int main(){
vector<int>pushV;
for(int i=1;i<=5;i++)
pushV.push_back(i);
vector<int>popV;
popV.push_back(4);
popV.push_back(5);
popV.push_back(3);
popV.push_back(2);
popV.push_back(1);
Solution test=Solution();
cout<<test.IsPopOrder(pushV,popV);
system("pause");
return 0;
}
【剑指offer】4.3举例让抽象问题具体化——面试题22:栈的压入、弹出序列
最新推荐文章于 2023-02-24 17:50:59 发布