剑指 Offer 31. 栈的压入、弹出序列(JAVA版)

题目:https://leetcode.cn/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/?favorite=xb9nqhhg

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


剑指 Offer 31. 栈的压入、弹出序列(JAVA版)_第1张图片

(上述来自力扣Krahets)

下面我们来看代码:

    public boolean ValidateStackSequences(int[] pushed, int[] popped) {
        Stackstack=new Stack<>(); //建立一个栈
        int j=0; //用来指向当前popped数组匹配的下标
        //遍历pushed数组,将里面的数推入栈中
        for (int i : pushed) {
            stack.push(i);
            while(!stack.empty()&&stack.peek()==popped[j]){ //可见,当此时栈顶与popped数组匹配时,出栈
                stack.pop();
                ++j;
            }
        }
        return stack.empty();  //如果序列匹配 则栈中不会有元素  否则有元素
    }

 

你可能感兴趣的:(java算法,数据结构)