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-სგან
Для удаления дубликатов из отсортированного массива in-place можно использовать два указателя: один для прохода по массиву, другой — для записи уникальных элементов. Идея в том, что когда встречается новый уникальный элемент, мы записываем его на позицию следующего уникального индекса.
Пример на Go:
func removeDuplicates(nums []int) int {
if len(nums) == 0 {
return 0
}
uniqueIndex := 0
for i := 1; i < len(nums); i++ {
if nums[i] != nums[uniqueIndex] {
uniqueIndex++
nums[uniqueIndex] = nums[i]
}
}
return uniqueIndex + 1
}
// Использование:
// nums := []int{0,0,1,1,1,2,2,3,3,4}
// length := removeDuplicates(nums)
// теперь первые length элементов nums — уникальные
Таким образом, функция возвращает количество уникальных элементов, а первые элементы массива содержат эти уникальные значения. Остальные элементы массива могут быть любыми.