【剑指Offer】栈的压入、弹出序列

题目

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

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public boolean IsPopOrder(int[] pushA, int[] popA) {
int popPos = 0;
Stack<Integer> stack = new Stack<>();

for (int i = 0; i < pushA.length; i++){
if (stack.isEmpty() || stack.peek() != popA[popPos])
stack.push(pushA[i]);

while (!stack.isEmpty() && stack.peek() == popA[popPos]){
stack.pop();
popPos++;
}
}

return stack.isEmpty();
}