Skip to main content

946 Validate Stack Sequences

Leetcode

Given two integer arrays pushed and popped each with distinct values, return true if this could have been the result of a sequence of push and pop operations on an initially empty stack, or false otherwise.

Example 1:

Input: pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
Output: true
Explanation: We might do the following sequence:
push(1), push(2), push(3), push(4),
pop() -> 4,
push(5),
pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

Example 2:

Input: pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
Output: false
Explanation: 1 cannot be popped before 2.


使用一个真实的栈来模拟压入和弹出的过程,如果最后栈为空,则压入弹出序列没有问题

public boolean validateStackSequences(int[] pushed, int[] popped) {
if(pushed==null || popped==null || pushed.length!=popped.length) return false;
int i1=0, i2=0;
Deque<Integer> stack=new LinkedList<>();
while(i1<pushed.length){
stack.push(pushed[i1++]);
while(!stack.isEmpty() && stack.peek()==popped[i2]){
stack.pop();
i2++;
}
}
return stack.isEmpty();
}