Tutte le sfide
Facile 0 risolte 0% di accettazione

Dividere una lista in blocchi

Taglia una lista in gruppi consecutivi di dimensione fissa, con un ultimo gruppo più corto se necessario.

Cosa imparerai

  • Scorrere una lista a salti di dimensione fissa
  • Prendere fette di cui l'ultima può essere più corta
  • Raggruppare dati per paginazione o lotti

Problema

Dividere i dati in blocchi di dimensione fissa è il modo in cui i programmi suddividono i risultati su più pagine, raggruppano le scritture nel database o inviano i dati in pacchetti.

Data una lista e la dimensione di un blocco, taglia la lista in blocchi consecutivi di esattamente size valori, in ordine. L'ultimo blocco contiene ciò che resta e può essere più corto.

Implementa split_into_chunks(values, size).

Ingresso

values: La lista da dividere.

size: La dimensione del blocco.

Uscita

Restituisci la lista dei blocchi. Una lista vuota non produce alcun blocco.

Vincoli

0 ≤ numero di valori ≤ 10,000

1 ≤ size ≤ 10,000

Esempi

Esempio 1
Input:
size = 3
values = [1, 2, 3, 4, 5, 6, 7]

Output atteso:
expected = [
    [1, 2, 3],
    [4, 5, 6],
    [7]
]
Input:
long long size = 3;
std::vector<long long> values = {1, 2, 3, 4, 5, 6, 7};

Output atteso:
std::vector<std::vector<long long>> expected = {
    {1, 2, 3},
    {4, 5, 6},
    {7}
};
Input:
long size = 3;
long[] values = new long[] {1, 2, 3, 4, 5, 6, 7};

Output atteso:
long[][] expected = new long[][] {
    new long[] {1, 2, 3},
    new long[] {4, 5, 6},
    new long[] {7}
};

Spiegazione

I gruppi di 3 sono: [1, 2, 3] e [4, 5, 6], e il 7 rimasto forma un ultimo blocco più corto.

Esempio 2
Input:
size = 5
values = [8, 9]

Output atteso:
expected = [
    [8, 9]
]
Input:
long long size = 5;
std::vector<long long> values = {8, 9};

Output atteso:
std::vector<std::vector<long long>> expected = {
    {8, 9}
};
Input:
long size = 5;
long[] values = new long[] {8, 9};

Output atteso:
long[][] expected = new long[][] {
    new long[] {8, 9}
};

Spiegazione

La dimensione è maggiore della lista, quindi tutto entra in un solo blocco: [[8, 9]].

Come affrontarlo

Prova prima da solo, poi apri un suggerimento alla volta.

Suggerimento 1

Le posizioni di partenza sono 0, size, 2·size e così via.

Suggerimento 2

Prendi una fetta da ogni posizione di partenza fino a start + size.

Suggerimento 3

L'ultima fetta può essere più corta, e una lista vuota non produce blocchi.

Complessità attesa

tempo O(n), spazio aggiuntivo O(n)

Riferimenti

Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.