У меня есть список из 100 случайных чисел.Каждое случайное целое число имеет значение от 0 до 99. Допускаются дубликаты, поэтому список может выглядеть примерно так:
56, 1, 1, 1, 1, 0, 2, 6, 99...
Мне нужно найти наименьшее целое число (> = 0), которое равно , а не содержится в списке.
Мое первоначальное решение таково:
vector<int> integerList(100); //list of random integers
...
vector<bool> listedIntegers(101, false);
for (int theInt : integerList)
{
listedIntegers[theInt] = true;
}
int smallestInt;
for (int j = 0; j < 101; j++)
{
if (!listedIntegers[j])
{
smallestInt = j;
break;
}
}
Но для этого требуется вторичный массив для учета и вторая (потенциально полная) итерация списка.Мне нужно выполнить эту задачу миллионы раз (реальное приложение в алгоритме раскраски жадного графа, где мне нужно найти наименьшее неиспользуемое значение цвета со списком смежности вершин), поэтому мне интересно, есть ли умный способ получитьтот же результат без особых накладных расходов?