Problema
Dividir dados em blocos de tamanho fixo é como programas paginam resultados, processam gravações em lotes em bancos de dados ou enviam dados em pacotes.
Dada uma lista e um tamanho de bloco, corte a lista em blocos consecutivos de exatamente size valores, em ordem. O último bloco fica com o que sobrar e pode ser menor.
Implemente split_into_chunks(values, size).
Entrada
values: A lista a ser dividida.
size: O tamanho do bloco.
Saída
Retorne a lista de blocos. Uma lista vazia não gera blocos.
Restrições
0 ≤ número de valores ≤ 10,000
1 ≤ size ≤ 10,000
Exemplos
Entrada:
size = 3
values = [1, 2, 3, 4, 5, 6, 7]
Saída esperada:
expected = [
[1, 2, 3],
[4, 5, 6],
[7]
]
Entrada:
long long size = 3;
std::vector<long long> values = {1, 2, 3, 4, 5, 6, 7};
Saída esperada:
std::vector<std::vector<long long>> expected = {
{1, 2, 3},
{4, 5, 6},
{7}
};
Entrada:
long size = 3;
long[] values = new long[] {1, 2, 3, 4, 5, 6, 7};
Saída esperada:
long[][] expected = new long[][] {
new long[] {1, 2, 3},
new long[] {4, 5, 6},
new long[] {7}
};
Explicação
Grupos de 3: [1, 2, 3] e [4, 5, 6], e o 7 restante forma um último bloco menor.
Entrada:
size = 5
values = [8, 9]
Saída esperada:
expected = [
[8, 9]
]
Entrada:
long long size = 5;
std::vector<long long> values = {8, 9};
Saída esperada:
std::vector<std::vector<long long>> expected = {
{8, 9}
};
Entrada:
long size = 5;
long[] values = new long[] {8, 9};
Saída esperada:
long[][] expected = new long[][] {
new long[] {8, 9}
};
Explicação
O tamanho é maior que a lista, então tudo cabe em um único bloco: [[8, 9]].
Como abordar
Tente sozinho primeiro e depois abra uma dica de cada vez.
Dica 1
As posições iniciais são 0, size, 2·size e assim por diante.
Dica 2
Pegue uma fatia de cada posição inicial até start + size.
Dica 3
A última fatia pode ser menor, e uma lista vazia não gera nenhum bloco.
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.