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
writeIndexen 1 (el primer elemento único ya está en su lugar). - Recorrer el array con
readIndexdesde 1 hasta el final. - Si el elemento actual no es igual al anterior, escribirlo en
nums[writeIndex]y aumentarwriteIndex.
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]