Welcome to Subscribe On Youtube
946. Validate Stack Sequences
Description
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 <= 10000 <= pushed[i] <= 1000- All the elements of
pushedare unique. popped.length == pushed.lengthpoppedis a permutation ofpushed.
Solutions
-
class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { Deque<Integer> stk = new ArrayDeque<>(); int j = 0; for (int v : pushed) { stk.push(v); while (!stk.isEmpty() && stk.peek() == popped[j]) { stk.pop(); ++j; } } return j == pushed.length; } } -
class Solution { public: bool validateStackSequences(vector<int>& pushed, vector<int>& popped) { stack<int> stk; int j = 0; for (int v : pushed) { stk.push(v); while (!stk.empty() && stk.top() == popped[j]) { stk.pop(); ++j; } } return j == pushed.size(); } }; -
class Solution: def validateStackSequences(self, pushed: List[int], popped: List[int]) -> bool: j, stk = 0, [] for v in pushed: stk.append(v) while stk and stk[-1] == popped[j]: stk.pop() j += 1 return j == len(pushed) -
func validateStackSequences(pushed []int, popped []int) bool { stk := []int{} j := 0 for _, v := range pushed { stk = append(stk, v) for len(stk) > 0 && stk[len(stk)-1] == popped[j] { stk = stk[:len(stk)-1] j++ } } return j == len(pushed) } -
function validateStackSequences(pushed: number[], popped: number[]): boolean { const stk = []; let j = 0; for (const v of pushed) { stk.push(v); while (stk.length && stk[stk.length - 1] == popped[j]) { stk.pop(); ++j; } } return j == pushed.length; } -
/** * @param {number[]} pushed * @param {number[]} popped * @return {boolean} */ var validateStackSequences = function (pushed, popped) { let stk = []; let j = 0; for (const v of pushed) { stk.push(v); while (stk.length && stk[stk.length - 1] == popped[j]) { stk.pop(); ++j; } } return j == pushed.length; }; -
public class Solution { public bool ValidateStackSequences(int[] pushed, int[] popped) { Stack<int> stk = new Stack<int>(); int j = 0; foreach (int x in pushed) { stk.Push(x); while (stk.Count != 0 && stk.Peek() == popped[j]) { stk.Pop(); ++j; } } return stk.Count == 0; } } -
impl Solution { pub fn validate_stack_sequences(pushed: Vec<i32>, popped: Vec<i32>) -> bool { let mut stack = Vec::new(); let mut i = 0; for &num in pushed.iter() { stack.push(num); while !stack.is_empty() && *stack.last().unwrap() == popped[i] { stack.pop(); i += 1; } } stack.len() == 0 } }