思路:利用栈进行模拟即可,将压入序列数据进行入栈,同时对比弹出序列,如果压入数据等于弹出数据,则将数据压入后进行弹出,同时判断范围是否越界,最后在遍历完弹出序列后,判断序列是否为空
解法1:

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        int id = 0;
        for(int i=0;i<popV.size();i++)
        {
            while(st.empty()||st.top()!=popV[i])//st为空,进行入栈;st栈顶等于弹出序列,将数据进行弹出
            {
                st.push(pushV[id++]);
                if(id>pushV.size())//范围越界,说明不是正确弹出序列
                {
                    return false;
                }
            }
            st.pop();
        }
        if(st.empty())//栈为空,说明是正确弹出序列
            return true;
        else
            return false;
    }
private:
    stack<int> st;
};

解法2:

class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        int id = 0;
        for(int i =0;i<pushV.size();i++)
        {
            st.push(pushV[i]);
            while(!st.empty()&&st.top()==popV[id]&&id<popV.size())
            {
                st.pop();
                id++;
            }
        }
        if(st.empty())
            return true;
        else
            return false;
    }
private:
    stack<int> st;
};