Senior
Dotots sakārtots skaitļu masīvs, kurā ir dublēti elementi. Jānoņem dublēti elementu vietā (tieši sākotnējā masīvā) un jāatgriež iegūtā masīva izmērs. Piemērs: Ievade: nums = [0,0,1,1,1,2,2,3,3,4] Izvade: 5, nums = [0,1,2,3,4,_,_,_,_,_] Skaidrojums: Šajā masīvā ir 5 unikāli elementi. Novietojiet tos pirmajās piecās pozīcijās un atgrieziet skaitli 5. Nākamie elementi sākotnējā masīvā var būt jebkādi.
sobes.tech AI
Atbilde no AI
Lai noņemtu dublikātus no sakārtota masīva vietā, var izmantot divus rādītājus: vienu masīva pārlūkošanai, otru unikālo elementu ierakstīšanai.
Ideja:
- Inicializējiet
writeIndexuz 1 (pirmais unikālais elements jau ir vietā). - Pārlūkojiet masīvu ar
readIndexno 1 līdz beigām. - Ja pašreizējais elements atšķiras no iepriekšējā, ierakstiet to
nums[writeIndex]un palielinietwriteIndex.
Rezultātā writeIndex būs unikālo elementu skaits.
Piemērs Go valodā:
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
}
// Lietošana:
// 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]