Комментарии 6
Да, это простое и хорошее решение, которое работает в большинстве случаев. Оно может оказаться медленнее, чем использование map
для удаления дублей, если размер слайса будет большим (например, миллион элементов и больше). Сортировка требует O(n*ln(n))
операций, где n
— размер слайса, а хэшмэп — O(n)
операций, т.е. при больших n
хэшмэп будет выигрывать по скорости. Недостаток удаление дублей с помощью хэшмепа — он требует больше памяти и работает медленнее при небольшом количестве элементов в слайсе.
удаление дублей тривиально :)
Можно раскрыть эту тривиальность для случая удаления тысячи дублей из миллиона элементов? Дубль копируем в конец а затем что-то типа `a = a[:len(a)-1] ` или что-то более нетривиальное?
Если массив отсортирован, то достаточно пробежаться по нему, имея два индекса i и j. Итерируемся по массиву с индексом i, запоминаем во временной переменной предыдущий элемент, и если он отличается от текущего, то увеличиваем j и копируем текущий элемент в тот же массив, по которому итерируемся, в позицию j. После чего возвращаем сабслайс a[0:j-1] (или a[0:j], сходу сложно сказать :)). Извините, если немного сумбурно объяснил :).
Вот ссылка на видео этого доклада — https://youtu.be/MZ5P21j_HLE
Вот ссылка на слайды — https://docs.google.com/presentation/d/1k7OjHvxTHA7669MFwsNTCx8hII-a8lNvpmQetLxmrEU/edit?usp=sharing
Go optimizations in VictoriaMetrics. Александр Валялкин