剑指 Offer 31. 栈的压入、弹出序列


剑指 Offer 31. 栈的压入、弹出序列

连模拟都没有想到了??。
我们不断将入栈序列\(pushed\)入栈,若栈顶元素和\(popped\)遍历到的位置\(popped[pos]\)相同,则表示找到了同样的出栈序列,则将\(pos\)加1,否则继续入栈,直到栈顶和遍历至的位置相同。
最后判断\(pos\)是否遍历完即可。

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        Deque st = new ArrayDeque<>();
        int pos = 0;
        for(int num : pushed) {
            st.push(num);
            while(pos < popped.length && !st.isEmpty() && st.peek() == popped[pos]) {
                st.pop();
                pos++;
            }
        }
        return pos == popped.length;
    }
}