Senior
Датта рўйхатда такрорланган элементлар бўлган тартибланган рақамлар массиви берилган. Уларни жойида (асли массивда) олиб ташлаш ва олинган массивнинг ўлчамини қайтариш керак. Масалан: Киритиш: nums = [0,0,1,1,1,2,2,3,3,4] Чиқиш: 5, nums = [0,1,2,3,4,_,_,_,_,_] Тушунтириш: Бу массивда 5 уникал элемент мавжуд. Уларни биринчи беш ўринга жойлаштиринг ва 5 рақамини қайтаринг. Кейинги элементлар асли массивда ҳар қандай бўлиши мумкин.
sobes.tech AI
Ҷавоб аз AI
Барои хориҷ кардани такрорҳо аз массиви дарназардоштаи дар ҷой, метавонед ду ишораро истифода баред: яке барои гузариш дар массив, дигар барои ҷойи навиштани уникҳои элементҳо.
Назария:
writeIndex-ро ба 1 оғоз кунед (аввалин унӣ аллакай дар ҷойи худ аст).- Бо
readIndexаз 1 то охир гузаред. - Агар элементи ҳозира бо гузашта фарқ кунад, онро дар
nums[writeIndex]нависед ваwriteIndex-ро зиёд кунед.
Дар охир, writeIndex шумораи унӣҳои элементҳоро нишон медиҳад.
Масалан дар 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
}
// Истифода:
// 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]