其实这个题很简单,直接模拟即可,时间和空间复杂复杂度都是O(n)。
直接根据弹出顺序,努力去模拟可能的压栈和弹栈的顺序。当然,压栈的顺序要严格按照pushV来进行。

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