Хорошо. Я отправлю комментарий, который я сделал выше, как ответ, хотя ваш вопрос довольно расплывчатый.
Шаг i = 1, 2 ^ 1, 2 ^ 2, ... 2 ^ m, пока не возникнет ошибка ArrayIndexOutofBounds .
Затем выполняйте поиск в двоичном коде между 2 ^ (m-1) и 2 ^ m, пока не найдете границу, в которой исчезла ошибка. Это п.
Это O (logn)
Редактировать
Это предложение основано на фрагменте, который вы разместили в качестве комментария, в котором ясно, что вы можете обнаружить ArrayIndexOutofBounds