946 Validate Stack Sequences

1. Question

Given two sequencespushedandpoppedwith distinct values, returntrueif and only if this could have been the result of a sequence of push and pop operations on an initially empty stack.

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.

Note:

  1. 0 <= pushed.length == popped.length <= 1000

  2. 0 <= pushed[i], popped[i] < 1000

  3. pushedis a permutation ofpopped.

  4. pushedandpoppedhave distinct values.

2. Implementation

(1) Stack

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        Stack<Integer> stack = new Stack();
        int i = 0;

        for (int num : pushed) {
            stack.push(num);

            while (!stack.isEmpty() && stack.peek() == popped[i]) {
                stack.pop();
                ++i;
            }
        }
        return stack.isEmpty();
    }
}

3. Time & Space Complexity

Stack: Time: O(n), Space: O(n)

Last updated

Was this helpful?