Sobes.tech
Senior

Étant donné un tableau trié de nombres contenant des éléments en double. Il faut supprimer les doublons en place (directement dans le tableau d'origine) et retourner la taille du tableau résultant. Exemple : Entrée : nums = [0,0,1,1,1,2,2,3,3,4] Sortie : 5, nums = [0,1,2,3,4,_,_,_,_,_] Explication : Dans ce tableau, il y a 5 éléments uniques. Placez-les dans les cinq premières positions du tableau d'origine et retournez le nombre 5. Les éléments suivants dans le tableau d'origine peuvent être n'importe quoi.

sobes.tech IA

Réponse de l'IA

Pour supprimer les doublons d'un tableau trié en place, vous pouvez utiliser deux pointeurs : l'un pour parcourir le tableau, l'autre pour la position d'écriture des éléments uniques.

Idée :

  • Initialisez writeIndex à 1 (le premier élément unique est déjà à sa place).
  • Parcourez le tableau avec readIndex de 1 jusqu'à la fin.
  • Si l'élément actuel n'est pas égal au précédent, écrivez-le dans nums[writeIndex] et incrémentez writeIndex.

Au final, writeIndex sera le nombre d'éléments uniques.

Exemple 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
}

// Utilisation :
// 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]