Sobes.tech
Senior

Dato un array ordinato di numeri che contiene elementi duplicati. È necessario rimuovere i duplicati in-place (direttamente nell'array originale) e restituire la dimensione dell'array risultante. Esempio: Input: nums = [0,0,1,1,1,2,2,3,3,4] Output: 5, nums = [0,1,2,3,4,_,_,_,_,_] Spiegazione: In questo array ci sono 5 elementi unici. Posizionali nelle prime cinque posizioni dell'array originale e restituisci il numero 5. Gli elementi successivi nell'array originale possono essere qualsiasi cosa.

sobes.tech AI

Risposta dell'AI

Per rimuovere i duplicati da un array ordinato in-place, si possono usare due puntatori: uno per attraversare l'array, l'altro per la posizione di scrittura degli elementi unici.

Idea:

  • Inizializza writeIndex a 1 (il primo elemento unico è già al suo posto).
  • Scorri l'array con readIndex da 1 fino alla fine.
  • Se l'elemento corrente non è uguale a quello precedente, scrivilo in nums[writeIndex] e incrementa writeIndex.

Alla fine, writeIndex sarà il numero di elementi unici.

Esempio in Go:

func removeDuplicates(nums []int) int {
    if len(nums) == 0 {
        return 0
    }
    writeIndex := 1
    for readIndex := 1; readIndex < len(nums); readIndex++ {
        if nums[readIndex] != nums[readIndex-1] {
            nums[writeIndex] = nums[readIndex]
            writeIndex++
        }
    }
    return writeIndex
}

// Uso:
// nums := []int{0,0,1,1,1,2,2,3,3,4}
// length := removeDuplicates(nums)
// fmt.Println(length) // 5
// fmt.Println(nums[:length]) // [0 1 2 3 4]