Sobes.tech
Senior

Gegeven een gesorteerde array van getallen die duplicaten bevat. Verwijder de duplicaten in-place (direct in de originele array) en geef de grootte van de resulterende array terug. Voorbeeld: Invoer: nums = [0,0,1,1,1,2,2,3,3,4] Uitvoer: 5, nums = [0,1,2,3,4,_,_,_,_,_] Uitleg: In deze array zijn 5 unieke elementen. Plaats ze op de eerste vijf posities in de originele array en geef het getal 5 terug. De volgende elementen in de originele array kunnen willekeurig zijn.

sobes.tech AI

Antwoord van AI

Om duplicaten uit een gesorteerde array in-place te verwijderen, kunnen twee pointers worden gebruikt: één om door de array te lopen, de andere voor de positie van het schrijven van unieke elementen.

Idee:

  • Initialiseer writeIndex op 1 (het eerste unieke element staat al op de juiste plaats).
  • Loop door de array met readIndex van 1 tot het einde.
  • Als het huidige element niet gelijk is aan het vorige, schrijf het dan naar nums[writeIndex] en verhoog writeIndex.

Uiteindelijk is writeIndex het aantal unieke elementen.

Voorbeeld in 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
}

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