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
writeIndexna 1 (prvý unikátny prvok je už na mieste). - Prechádzajte pole s
readIndexod 1 do konca. - Ak je aktuálny prvok odlišný od predchádzajúceho, zapíšte ho do
nums[writeIndex]a zvýštewriteIndex.
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]