Как насчет создания другого массива для хранения переменных, которые вы нашли.В этом массиве число может быть его индексом, и если оно было найдено, хранится как логическое значение.Затем вы просматриваете этот массив, чтобы увидеть, какой из них не был найден.Ваше описание довольно нечеткое, поэтому я не могу решить его точно, но оно может приблизить вас.
bool arr_check [ARR_SIZE]; // whick numbers has been found.
for (int i=0; i<ARR_SIZE; i++)
if(arr[i]>0)
arr_check[arr[i]] = true;
for (int i=0; i<ARR_SIZE; i++)
if (!arr_check[i])
return i;
Вам нужно будет только дважды просмотреть массив, что придает ему сложность '2N', верно?Вы не получите его быстрее без предварительной сортировки, что больше, чем «N»