Одной из возможностей является использование фильтра Блума.
Фильтр Блума работает быстро (например, с использованием хэш-кода) и не содержит ложных негативов. Это также очень экономно. Различные параметры (размер (м) и количество функций (к)) можно настроить для достижения лучшего ложноположительного показателя за счет размера и времени.
Вы добавляете все строки одну за другой к набору, представленному фильтром. Во время вставки вы можете определить, существует ли дубликат. Поскольку он не имеет ложных отрицаний, вам нужно только дважды проверить строки, которые появляются как «дубликаты» фильтра.
Если вам нужна дополнительная информация о фильтрах Блума, перейдите по ссылке wikipedia
Это, безусловно, лучший подход к решению этой проблемы. Фильтры Блума используются прокси-серверами, чтобы определить, находится ли URL в их кэше. Прокси-сервер видит миллиарды URL-адресов и должен быть в состоянии очень быстро определить, является ли URL-адрес новым или был «просмотрен» им ранее. Если URL-адрес «новый», прокси-сервер немедленно выбирает веб-сайт с исходного URL-адреса, а не ищет его в своем кэше.
Все остальные ответы здесь, которые даже отдаленно используют «сортировку», явно неверны.