【剑指offer】4.3举例让抽象问题具体化——面试题22:栈的压入、弹出序列
2016-01-11 20:39
651 查看
//题目描述 // //输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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; }