Как найти целое число в списке размером N за постоянное время?
Свойства списка:
должен иметь размер N, где N - количество целых чисел
нет пустых клеток
числа могут быть не совсем последовательными (т. е. {-23,-15,-3,1,2,6,7,8,15,100})
Вставка / поиск должны быть в постоянном времени.
Моим первым инстинктом было использование хеш-таблицы, но это создавало неиспользуемые ячейки, в которых пропускались числа.
Есть ли способ создать такой список для проверки в постоянное время, существует ли число в этом списке?
1 ответ
Следуя моим комментариям, вы можете пойти с Set
В зависимости от вашего конкретного случая использования вы можете проверить такие вещи, как Java HashSet или LinkedHashSet, если вам нужно поддерживать порядок, который в соответствии с документом должен быть постоянным временем:
Как и HashSet, он обеспечивает постоянную производительность для основных операций (добавление, хранение и удаление), предполагая, что хеш-функция правильно распределяет элементы между сегментами.
Если вы ищете решения для других платформ, возможно, есть эквивалентные реализации или вы можете проверить исходный код Java и реализовать его самостоятельно.