public static boolean validateStackSequences(int[] pushed, int[] popped) {
// 双指针模拟
int p1 = 0;
int p2 = 0;
Stack<Integer> stack = new Stack<>();
while (p2 != popped.length){
// 符合栈顶跟p2指针相等就出栈并且指针后移
if (!stack.empty() && stack.peek().equals(popped[p2])){
stack.pop();
p2++;
}else {
// p1越界且不符合上面条件 走不动了
if (p1 >= pushed.length){
return false;
}
// 不符合上面条件 进栈且指针后移
stack.push(pushed[p1]);
p1++;
}
}
return true;
}
思路更简单 一个栈就搞定了
public static boolean validateStackSequences(int[] pushed, int[] popped){
Stack<Integer> stack = new Stack<>();
int i = 0;
for(int num : pushed) {
stack.push(num); // num 入栈
while(!stack.isEmpty() && stack.peek() == popped[i]) { // 循环判断与出栈
stack.pop();
i++;
}
}
return stack.isEmpty();
}