Sobes.tech
Senior

Duotas sutvarkytas skaičių masyvas, kuriame yra dubliuojamų elementų. Reikia vietoje (tiesiogiai originaliame masyve) pašalinti dubliavimus ir grąžinti gauto masyvo dydį. Pavyzdys: Įvestis: nums = [0,0,1,1,1,2,2,3,3,4] Išvestis: 5, nums = [0,1,2,3,4,_,_,_,_,_] Paaiškinimas: Šiame masyve yra 5 unikalūs elementai. Juos padėkite pirmuose penkiuose masyvo pozicijose ir grąžinkite skaičių 5. Kiti elementai originaliame masyve gali būti bet kokie.

sobes.tech AI

Atsakymas iš AI

Norint pašalinti pasikartojančius elementus iš surūšiuoto masyvo vietoje, galima naudoti du rodyklius: vieną masyvo perėjimui, kitą unikalių elementų įrašymo vietai.

Idėja:

  • Nustatykite writeIndex į 1 (pirmas unikalus elementas jau vietoje).
  • Perjunkite per masyvą su readIndex nuo 1 iki pabaigos.
  • Jei dabartinis elementas skiriasi nuo ankstesnio, įrašykite jį į nums[writeIndex] ir padidinkite writeIndex.

Galutinis rezultatas: writeIndex bus unikalių elementų skaičius.

Pavyzdys Go kalba:

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
}

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