Есть ли способ найти все повторяющиеся элементы в массиве из N элементов в O (N) времени?
Пример:
Вход: 11, 29, 81, 14, 43, 43, 81, 29
Выход: 29, 81, 43
Сортировка ввода и выполнение линейного сканирования для обнаружения дубликатов уничтожает порядок и дает результат: 29,43,81.
Сортировка по другому массиву индексов {0,1,...N-1}
в соответствии с заданным массивом для получения {1,4,2}
, а затем сортировка результирующего набора индексов для получения {1,2,4}
даст нам {29,81,43}
, но это займет O(N logN)
время.
Существует ли алгоритм O (N) для решения этой проблемы?
P.S. Я забыл добавить: я не хочу использовать хеш-таблицы. Я ищу не-хэш-решение.