Если массив состоит из целых чисел и не может содержать дубликаты, вы можете просто использовать двоичный поиск.
Например, скажем, у нас есть массив:
a[0] == -30
a[1] == 1
a[2] == 200
a[3] == 200
a[4] == 204
a[5] == 205
a[6] == 206
a[7] == 207
- Сначала попробуйте[floor (avg (0,7))] (то есть a [3]).Это равно 200. 200 слишком велико.
- Итак, перейдите к нижней половине.Попробуйте [floor (avg (0,2))] (то есть a [1]).Это равно 1. Ура!
Ваш бинарный поиск либо успешно найдет j, для которого a [j] == j, либо завершится неудачей из-за нехватки мест для поиска.Поскольку бинарный поиск - это O (log n), в течение этой временной сложности вы будете знать значение j или то, что такого j не существует.
Обратите внимание, что если несколько значений j удовлетворяют условию, вы просто найдетепроизвольный из них.