Oggi vediamo il seguente esercizio di LeetCode:

Given the array nums consisting of 2n elements in the form [x1,x2,…,xn,y1,y2,…,yn]. Return the array in the form [x1,y1,x2,y2,…,xn,yn].

Possiamo risolvere questo problema intercalando gli elementi delle due metà dell’array, come nel codice proposto.

L’idea chiave è:

  • dividiamo logicamente l’array in due metà: la prima contiene gli elementi x, la seconda gli elementi y
  • calcoliamo la metà della lunghezza dell’array
  • scorriamo i primi n elementi
  • per ogni indice i:
    • aggiungiamo nums[i] (parte sinistra)
    • aggiungiamo nums[i + n] (parte destra)
  • continuiamo fino a ricostruire l’array alternato

Questo approccio permette di ottenere una complessità O(n), dove n è la metà della lunghezza dell’array, ed è efficiente perché costruisce direttamente il risultato senza passaggi aggiuntivi o riorganizzazioni intermedie.

function shuffle(nums: number[], n: number): number[] {
    let numsShuffle: number[] = [];
    let halfSize = nums.length / 2;

    for(let i = 0; i < n; i++){
        numsShuffle.push(nums[i]);
        numsShuffle.push(nums[i + halfSize]);
    }
    
    return numsShuffle;
};