Fácil 0 resolvidos 0% de aceitação

Achatar um Array 2D

Combine as linhas de um array 2D de inteiros em um único array.

O que você vai aprender

  • Percorrer linhas e colunas
  • Adicionar os valores em uma única lista
  • Manter a ordem original

Problema

Ver original (inglês)

Combine as linhas de um array 2D de inteiros em um único array. Leia as linhas de cima para baixo e os inteiros dentro de cada linha da esquerda para a direita. Pule linhas vazias. Preserve inteiros repetidos e sua ordem. As linhas podem ter comprimentos diferentes. Existem exatamente dois níveis de arrays: as linhas contêm apenas inteiros, sem valores nulos ou listas mais profundas.

Implemente flatten_nested_list(values).

Entrada

values: As linhas de inteiros a serem combinadas, na ordem.

Saída

Retorne todos os inteiros na ordem das linhas. Retorne um array vazio se não houver inteiros.

Restrições

0 ≤ número de linhas ≤ 10.000. No máximo 10.000 inteiros no total. Cada inteiro está entre −1.000.000.000 e 1.000.000.000. As linhas podem ser vazias ou ter comprimentos diferentes.

Exemplos

Exemplo 1
Entrada:
values = [
    [1, 2],
    [],
    [3, 4]
]

Saída esperada:
expected = [1, 2, 3, 4]
Entrada:
std::vector<std::vector<long long>> values = {
    {1, 2},
    {},
    {3, 4}
};

Saída esperada:
std::vector<long long> expected = {1, 2, 3, 4};
Entrada:
long[][] values = new long[][] {
    new long[] {1, 2},
    new long[] {},
    new long[] {3, 4}
};

Saída esperada:
long[] expected = new long[] {1, 2, 3, 4};

Explicação

Leia 1 e 2 da primeira linha. Pule a segunda linha vazia. Adicione 3 e 4 da última linha.

Exemplo 2
Entrada:
values = [
    [],
    []
]

Saída esperada:
expected = []
Entrada:
std::vector<std::vector<long long>> values = {
    {},
    {}
};

Saída esperada:
std::vector<long long> expected = {};
Entrada:
long[][] values = new long[][] {
    new long[] {},
    new long[] {}
};

Saída esperada:
long[] expected = new long[] {};

Explicação

Ambas as linhas estão vazias, então não há inteiros para adicionar.

Como abordar

Tente sozinho primeiro e depois abra uma dica de cada vez.

Dica 1

Percorra as linhas na ordem e adicione cada inteiro que encontrar.

Dica 2

Linhas vazias não contribuem, mas mantenha a ordem de todos os valores das linhas não vazias.

Dica 3

A entrada tem apenas dois níveis, então não é preciso achatamento recursivo.

Complexidade esperada

tempo O(n), espaço extra O(n)

Referências

Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.