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.
Constraints:
1 <= pushed.length <= 1000
0 <= pushed[i] <= 1000
All the elements of pushed are unique.
popped.length == pushed.length
popped is a permutation of pushed.
Solutions
Solution 1: Stack Simulation
Thinking
Check whether \(\textit{popped}\) is a valid pop sequence for \(\textit{pushed}\). Values are unique, so push in given order and pop whenever the top matches the next needed pop. If every pop is consumed, the sequence is legal.
We iterate through the \(\textit{pushed}\) array. For the current element \(x\) being iterated, we push it into the stack \(\textit{stk}\). Then, we check if the top element of the stack is equal to the next element to be popped in the \(\textit{popped}\) array. If they are equal, we pop the top element from the stack and increment the index \(i\) of the next element to be popped in the \(\textit{popped}\) array. Finally, if all elements can be popped in the order specified by the \(\textit{popped}\) array, return \(\textit{true}\); otherwise, return \(\textit{false}\).
The time complexity is \(O(n)\), and the space complexity is \(O(n)\). Here, \(n\) is the length of the \(\textit{pushed}\) array.