Как стать автором
Обновить

Комментарии 6

Кстати задачу поиска дублей в Go я лично решал путем сортировки слайса и после этого удаление дублей тривиально :). Не знаю, быстрее ли это решение, чем использовать bitset, но оно очень простое и памяти на map выделять не требуется.

Да, это простое и хорошее решение, которое работает в большинстве случаев. Оно может оказаться медленнее, чем использование 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], сходу сложно сказать :)). Извините, если немного сумбурно объяснил :).

Понятно, спасибо
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории