> For the complete documentation index, see [llms.txt](https://code-snippets.hbamithkumara.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://code-snippets.hbamithkumara.com/leetcode/problems/901-1000/validate-stack-sequences.md).

# 946. Validate Stack Sequences

### Description

Given two sequences `pushed` and `popped` **with distinct values**, return `true` if and only if this could have been the result of a sequence of push and pop operations on an initially empty stack.

### Constraints

* `0 <= pushed.length == popped.length <= 1000`
* `0 <= pushed[i], popped[i] < 1000`
* `pushed` is a permutation of `popped`.
* `pushed` and `popped` have distinct values.

### Approach

### Links

* GeeksforGeeks
* [Leetcode](https://leetcode.com/problems/validate-stack-sequences/)
* ProgramCreek
* YouTube

### **Examples**

{% tabs %}
{% tab title="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
{% endtab %}

{% tab title="Example 2" %}
**Input:** pushed = \[1, 2, 3, 4, 5], popped = \[4, 3, 5, 1, 2]

**Output:** false

**Explanation:** 1 cannot be popped before 2.
{% endtab %}
{% endtabs %}

### **Solutions**

{% tabs %}
{% tab title="Solution 1" %}

```java
/**
 * Time complexity : O(N), where N is the length of pushed and popped.
 * Space complexity : O(N)
 */

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

        int j = 0;
        for (int x: pushed) {
            stack.push(x);
            while (!stack.isEmpty() && j < N && stack.peek() == popped[j]) {
                stack.pop();
                j++;
            }
        }

        return j == N;
    }
}
```

{% endtab %}

{% tab title="Solution 2" %}

```java
/**
 * Time complexity : O(N), where N is the length of pushed and popped.
 * Space complexity : O(1)
 */
 
class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        int n = pushed.length, top = 0;
        
		for(int pushIdx = 0, popIdx = 0; pushIdx < n; pushIdx++) {
            // Push kth element to stack
            pushed[top] = pushed[pushIdx];
            
            // Pop if element match
            while(top >= 0 && pushed[top] == popped[popIdx]) {
                top--;
                popIdx++;
            }
            
            top++;
        }
        return top == 0;
    }
}
```

{% endtab %}
{% endtabs %}

### **Follow up**

*
