剑指offer. 面试题31. 栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。

剑指offer. 面试题31. 栈的压入、弹出序列_第1张图片 

    bool validateStackSequences(vector& pushed, vector& popped) {

        if(pushed.empty() && popped.empty())
            return true;

        if(pushed.empty() || popped.empty())
            return false;
        
        stack simulation;
        int p1 = 0, p2 = 0;
        simulation.push(pushed[p1++]);

        while(simulation.size()) {

            if(simulation.top() == popped[p2]) {

                simulation.pop();
                p2++;
                if(p2 == popped.size()) return true;
                if(p1 < pushed.size() && simulation.empty()) simulation.push(pushed[p1++]);
                continue;
            }

            if(p1 == pushed.size())
                return false;

            simulation.push(pushed[p1++]);
        }
        return false;
    }

 

你可能感兴趣的:(【leetcode刷题】,【算法】)