美文网首页
21. 栈的压入、弹出序列

21. 栈的压入、弹出序列

作者: 丶沧月 | 来源:发表于2019-03-13 22:39 被阅读0次

    题目描述

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。

    例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 是该压栈序列对应的一个弹出序列,但 4,3,5,1,2 就不可能是该压栈序列的弹出序列。

    解题思路

    使用一个栈来模拟压入弹出操作。

    代码实现

    public boolean IsPopOrder(int[] pushSequence, int[] popSequence) {
        int n = pushSequence.length;
        Stack<Integer> stack = new Stack<>();
        for (int pushIndex = 0, popIndex = 0; pushIndex < n; pushIndex++) {
            stack.push(pushSequence[pushIndex]);
            while (popIndex < n && !stack.isEmpty() 
                    && stack.peek() == popSequence[popIndex]) {
                stack.pop();
                popIndex++;
            }
        }
        return stack.isEmpty();
    }
    

    相关文章

      网友评论

          本文标题:21. 栈的压入、弹出序列

          本文链接:https://www.haomeiwen.com/subject/ubwxmqtx.html