Sobes.tech
Senior

Дат је сортирани низ бројева који садржи дупликате. Потребно је уклонити дупликате на месту (директно у оригиналном низу) и вратити величину добијеног низа. Пример: Улаз: nums = [0,0,1,1,1,2,2,3,3,4] Излаз: 5, nums = [0,1,2,3,4,_,_,_,_,_] Објашњење: У овом низу има 5 јединствених елемената. Положите их на првих пет позиција у оригиналном низу и вратите број 5. Следећи елементи у оригиналном низу могу бити било шта.

sobes.tech АИ

Одговор од АИ

Да бисте уклонили дупликате из сортираног низа ин-плеце, можете користити два показивача: један за пролазак кроз низ, други за позицију за записивање јединствених елемената.

Идеја:

  • Иницијализујте writeIndex на 1 (први јединствени елемент је већ на месту).
  • Прођите кроз низ са readIndex од 1 до краја.
  • Ако је тренутни елемент различит од претходног, запишите га у nums[writeIndex] и повећајте writeIndex.

На крају, writeIndex ће бити број јединствених елемената.

Пример у 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
}

// Коришћење:
// 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]