Sobes.tech
Senior

Dado un array ordenado de números que contiene elementos duplicados. Es necesario eliminar los duplicados in-place (directamente en el array original) y devolver el tamaño del array resultante. Ejemplo: Entrada: nums = [0,0,1,1,1,2,2,3,3,4] Salida: 5, nums = [0,1,2,3,4,_,_,_,_,_] Explicación: En este array hay 5 elementos únicos. Colóquelos en las primeras cinco posiciones del array original y devuelva el número 5. Los elementos posteriores en el array original pueden ser cualquier cosa.

sobes.tech AI

Respuesta de la IA

Para eliminar duplicados de un array ordenado in-place, se pueden usar dos punteros: uno para recorrer el array y otro para la posición de escritura de elementos únicos.

Idea:

  • Inicializar writeIndex en 1 (el primer elemento único ya está en su lugar).
  • Recorrer el array con readIndex desde 1 hasta el final.
  • Si el elemento actual no es igual al anterior, escribirlo en nums[writeIndex] y aumentar writeIndex.

Al final, writeIndex será la cantidad de elementos únicos.

Ejemplo en 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]