946. Validate Stack Sequences

LeetCode medium original: C# #array #csharp #leetcode #medium #stack
선택한 UI 언어에 맞게 문제 텍스트를 러시아어에서 번역합니다. 코드는 변경하지 않습니다.

given, что два целочисленных 배열а pushed и popped имеют разные значения, return true, если это могло быть результатом последовательности операций push и pop на изначально пустом стеке, или false в противном случае.

예제:

Input: pushed = [1,2,3,4,5], popped = [4,5,3,2,1]

Output: true

C# 해법

매칭됨/원본
public class Solution {
    public bool ValidateStackSequences(int[] pushed, int[] popped) {
        Stack<int> stack = new Stack<int>();
        int j = 0;
        foreach (int x in pushed) {
            stack.Push(x);
            while (stack.Count > 0 && j < popped.Length && stack.Peek() == popped[j]) {
                stack.Pop();
                j++;
            }
        }
        return j == popped.Length;
    }
}

C++ 해법

자동 초안, 제출 전 검토
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public bool ValidateStackSequences(vector<int>& pushed, vector<int>& popped) {
        stack<int> stack = new stack<int>();
        int j = 0;
        foreach (int x in pushed) {
            stack.push(x);
            while (stack.size() > 0 && j < popped.size() && stack.Peek() == popped[j]) {
                stack.pop();
                j++;
            }
        }
        return j == popped.size();
    }
}

Java 해법

매칭됨/원본
class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        Stack<Integer> stack = new Stack<>();
        int j = 0;
        for (int x : pushed) {
            stack.push(x);
            while (!stack.isEmpty() && j < popped.length && stack.peek() == popped[j]) {
                stack.pop();
                j++;
            }
        }
        return j == popped.length;
    }
}

JavaScript 해법

매칭됨/원본
var validateStackSequences = function(pushed, popped) {
    const stack = [];
    let j = 0;
    for (let x of pushed) {
        stack.push(x);
        while (stack.length && j < popped.length && stack[stack.length - 1] === popped[j]) {
            stack.pop();
            j++;
        }
    }
    return j === popped.length;
};

Python 해법

매칭됨/원본
def validateStackSequences(pushed, popped):
    stack = []
    j = 0
    for x in pushed:
        stack.append(x)
        while stack and j < len(popped) and stack[-1] == popped[j]:
            stack.pop()
            j += 1
    return j == len(popped)

Go 해법

매칭됨/원본
package main

func validateStackSequences(pushed []int, popped []int) bool {
    stack := []int{}
    j := 0
    for _, x := range pushed {
        stack = append(stack, x)
        for len(stack) > 0 && j < len(popped) && stack[len(stack)-1] == popped[j] {
            stack = stack[:len(stack)-1]
            j++
        }
    }
    return j == len(popped)
}

Algorithm

Инициализировать пустой стек.

Использовать указатель j для отслеживания текущей позиции в 배열е popped.

Пройти по каждому elementу в 배열е pushed:

Добавить element в стек.

Проверить верхний element стека:

Если он совпадает с текущим elementом в popped, удалить element из стека и увеличить указатель j.

В конце вернуть true, если указатель j достиг конца 배열а popped, иначе вернуть false.

😎

Vacancies for this task

활성 채용 with overlapping task tags are 표시됨.

전체 채용
아직 활성 채용이 없습니다.