Sobes.tech
Senior

Sıralanmış ve içinde tekrar eden öğeler bulunan bir sayı dizisi verildiğinde, tekrar edenleri yerinde (dizinin kendisinde) kaldırmanız ve kalan dizinin boyutunu geri döndürmeniz gerekir. Örnek: Girdi: nums = [0,0,1,1,1,2,2,3,3,4] Çıktı: 5, nums = [0,1,2,3,4,_,_,_,_,_] Açıklama: Bu dizide 5 benzersiz öğe var. Bunları dizinin ilk beş konumuna yerleştirin ve 5 sayısını geri döndürün. Dizinin kalan öğeleri herhangi bir şey olabilir.

sobes.tech yapay zeka

AI'dan gelen yanıt

Sıralanmış bir diziden yinelenenleri yerinde kaldırmak için iki gösterge kullanılabilir: biri diziyi dolaşmak için, diğeri ise benzersiz öğelerin yazılma konumu içindir.

Fikir:

  • writeIndex'i 1 olarak başlatın (ilk benzersiz öğe zaten yerinde).
  • readIndex ile diziyi 1'den sona kadar dolaşın.
  • Eğer mevcut öğe bir öncekine eşit değilse, onu nums[writeIndex]'e yazın ve writeIndex'i artırın.

Sonuçta, writeIndex benzersiz öğelerin sayısıdır.

Go dilinde örnek:

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
}

// Kullanım:
// 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]