Sobes.tech
Senior

Dodan je seřazený seznam čísel obsahující duplicitní prvky. Je třeba odstranit duplicity na místě (přímo v původním poli) a vrátit velikost výsledného pole. Příklad: Vstup: nums = [0,0,1,1,1,2,2,3,3,4] Výstup: 5, nums = [0,1,2,3,4,_,_,_,_,_] Vysvětlení: V tomto poli je 5 unikátních prvků. Umístěte je na první pět pozic v původním poli a vraťte číslo 5. Následující prvky v původním poli mohou být jakékoliv.

sobes.tech AI

Odpoveď od AI

Na odstránenie duplicitných prvkov zo zoradeného poľa na mieste môžete použiť dva ukazovatele: jeden na prechádzanie poľom, druhý na zápis unikátnych prvkov.

Myšlienka:

  • Inicializujte writeIndex na 1 (prvý unikátny prvok je už na mieste).
  • Prechádzajte pole s readIndex od 1 do konca.
  • Ak je aktuálny prvok odlišný od predchádzajúceho, zapíšte ho do nums[writeIndex] a zvýšte writeIndex.

Na konci bude writeIndex počet unikátnych prvkov.

Príklad v 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
}

// Použitie:
// 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]