Sobes.tech
Senior

Tartiblangan va takrorlangan elementlar mavjud bo'lgan raqamlar massiv berilgan. Takrorlarni joyida (asl massivda) olib tashlash va hosil bo'lgan massivning o'lchamini qaytarish kerak. Misol: Kiritish: nums = [0,0,1,1,1,2,2,3,3,4] Chiqish: 5, nums = [0,1,2,3,4,_,_,_,_,_] Tushuntirish: Bu massivda 5 ta noyob element mavjud. Ularni massivning birinchi beshta pozitsiyasiga joylashtiring va 5 raqamini qaytaring. Keyingi elementlar massivda istalgan bo'lishi mumkin.

sobes.tech AI

AIdan javob

Tartiblangan massivdan takrorlanadigan elementlarni joyida olib tashlash uchun ikki ko'rsatkichdan foydalanish mumkin: biri massivni aylanib chiqish uchun, ikkinchisi esa noyob elementlarni yozish uchun.

G'oya:

  • writeIndex ni 1 ga sozlang (birinchi noyob element allaqachon joyida).
  • readIndex bilan massivni 1 dan oxirigacha o'ting.
  • Agar hozirgi element oldingidan farq qilsa, uni nums[writeIndex] ga yozing va writeIndex ni oshiring.

Natijada, writeIndex noyob elementlar sonini ko'rsatadi.

Go tilida misol:

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
}

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