«Умный» ответ - лучшее решение, когда список не отсортирован, поскольку он посещает каждый элемент только один раз и использует O (1) дополнительного пространства. Если список отсортирован по , существует даже решение O (log n): вы можете выполнить двоичный поиск. Посмотрев на центральный элемент, вы можете увидеть, является ли дублирующийся номер до или после этого элемента, и продолжите деление пополам, пока не найдете его.
Пример:
1 2 2 3 4 5 6
Центральным элементом является 3, но он находится на четвертой позиции, поэтому дубликат должен быть перед ним. Следующая проверка - 2 во второй позиции, поэтому мы должны присматривать за второй позицией и т. Д.