//题目描述
//
//输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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:栈的压入、弹出序列
最新推荐文章于 2024-04-18 23:50:02 发布
本文探讨了如何通过栈操作来验证给定的弹出序列是否能由特定的压入序列产生,涉及算法实现与复杂度分析。


1739

被折叠的 条评论
为什么被折叠?



