В связи с классической задачей найти целое число не среди четырех миллиардов заданных, но не совсем то же самое.
Чтобы прояснить, под целыми числами я имею в виду лишь подмножество своего математического определения. То есть предположим, что существует только конечное число целых чисел. Скажем, в C++, они int
в диапазоне [INT_MIN, INT_MAX]
.
Теперь, используя std::vector<int>
(без дубликатов) или std::unordered_set<int>
, чей размер может быть 40, 400, 4000 или около того, но не слишком большой, как эффективно генерировать число, которое гарантированно не быть среди данных?
Если нет проблем с переполнением, тогда я мог бы умножить все ненулевые единицы и добавить продукт на 1. Но есть. Тестовые случаи противника могут намеренно содержать INT_MAX
.
Я больше за простые, неслучайные подходы. Есть ли?
Спасибо!
Обновление: чтобы убрать неоднозначность, скажем, несортированный std::vector<int>
который гарантированно не будет иметь дубликатов. Поэтому я спрашиваю, есть ли что-нибудь лучше, чем O (n log (n)). Также обратите внимание, что контрольные примеры могут содержать как INT_MIN
и INT_MAX
.