Sobes.tech
Senior

Adott egy rendezett számokat tartalmazó tömb, amelyben vannak duplikált elemek. A duplikátumokat helyben (az eredeti tömbben) kell eltávolítani, és vissza kell adni az így kapott tömb méretét. Példa: Bemenet: nums = [0,0,1,1,1,2,2,3,3,4] Kimenet: 5, nums = [0,1,2,3,4,_,_,_,_,_] Magyarázat: Ebben a tömbben 5 egyedi elem van. Helyezze őket az első öt pozícióba az eredeti tömbben, és adja vissza az 5 számot. A többi elem az eredeti tömbben lehet bármilyen.

sobes.tech MI

Válasz az MI-től

A rendezett tömbben lévő duplikátumok helyben történő eltávolításához két mutatót lehet használni: egyet a tömb bejárására, egyet pedig az egyedi elemek írási helyének kijelölésére.

Ötlet:

  • Inicializálja a writeIndex-et 1-re (az első egyedi elem már helyén van).
  • Menjen végig a tömbön a readIndex segítségével 1-től a végéig.
  • Ha az aktuális elem nem egyezik az előzővel, írja be a nums[writeIndex] helyre, és növelje a writeIndex értékét.

Végül a writeIndex lesz az egyedi elemek száma.

Példa Go nyelven:

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
}

// Használat:
// 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]