Senior
Επίπεδο δυσκολίας: ΕΥΚΟΛΟ Δίνεται ένας ταξινομημένος πίνακας αριθμών, στον οποίο υπάρχουν διπλότυπα. Πρέπει να αφαιρέσετε τα διπλότυπα in-place (αμέσως στον αρχικό πίνακα) και να επιστρέψετε το μέγεθος του τελικού πίνακα. Παράδειγμα: Είσοδος: 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 — уникальные
Таким образом, функция возвращает количество уникальных элементов, а первые элементы массива содержат эти уникальные значения. Остальные элементы массива могут быть любыми.