Создайте массив размером n, пройдите через ваш массив и увеличьте позицию в массиве в качестве индекса.Если в любое время массив счетчиков имеет не 0 или не 1 значение, вы можете остановиться.Если вы не можете найти индекс, вы можете остановиться сейчас, так как знаете, что у вас его нет.
Вот краткий пример Java.В этом примере вам не нужно считать в конце, потому что все, что приведет к значению, отличному от 1, приведет к сбою в середине.
boolean isRange(int[] arr) {
int[] counts = new int[arr.length];
for(int i : arr) {
if(i < 1 || i > arr.length) return false;
if(counts[i - 1] != 0) return false;
counts[i-1] = 1;
}
return true; // if it wasn't, we would have failed by now
}