Sobes.tech
Senior

Given a sorted array of numbers that contains duplicates. You need to remove duplicates in-place (directly in the original array) and return the size of the resulting array. Example: Input: nums = [0,0,1,1,1,2,2,3,3,4] Output: 5, nums = [0,1,2,3,4,_,_,_,_,_] Explanation: There are 5 unique elements in this array. Place them in the first five positions of the original array and return the number 5. The subsequent elements in the original array can be anything.

sobes.tech AI

Vastus AI-lt

Sorteeritud massiivist duplikaatide eemaldamiseks kohapeal saab kasutada kahte näidikut: üks massiivi läbimiseks, teine unikaalsete elementide kirjutamise positsiooni jaoks.

Idee:

  • Initsialiseeri writeIndex väärtusega 1 (esimene unikaalne element on juba kohal).
  • Läbi massiivi readIndex-iga alates 1-st kuni lõpuni.
  • Kui praegune element erineb eelmisest, kirjuta see nums[writeIndex]-sse ja suurenda writeIndex.

Lõpuks on writeIndex unikaalsete elementide arv.

Näide Go keeles:

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
}

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