Важный вопрос заключается в том, хотите ли вы решить эту проблему эффективно , или же вы хотите точно .
Если у вас действительно 10 миллиардов чисел и просто один один дубликат, то вы находитесь в ситуации " в стоге сена ". Интуитивно, если не считать очень грязного и нестабильного решения, нет надежды решить это без сохранения значительного количества чисел.
Вместо этого перейдите к вероятностным решениям , которые использовались в большинстве практических применений этой проблемы (в сетевом анализе вы пытаетесь найти мышей , элементы, которые очень редко появляются в большом наборе данных).
Возможное решение, которое может быть найдено для получения точных результатов: используйте достаточно высокое разрешение Фильтр Блума . Либо используйте фильтр, чтобы определить, был ли элемент уже виден, либо, если вы хотите идеальной точности, используйте (как предложил kbrimington использовать стандартную хеш-таблицу), чтобы отфильтровать элементы, которые вы, возможно, не можете увидели и во втором проходе определите элементы, которые вы на самом деле видите дважды.
И если ваша проблема немного отличается - например, вы знаете, что у вас есть как минимум 0,001% элементов, которые повторяются дважды, и вы хотели бы узнать, сколько их приблизительно, или вы хотели бы получить случайная выборка таких элементов, а затем целый набор вероятностных потоковых алгоритмов, в духе Flajolet & Martin , Alon et al., существуют и очень интересны (не говоря уже о высокой эффективности).