Хорошо, во-первых, я надеюсь, что вы знаете, что двоичный поиск не будет работать, если nums
не отсортирован.
Тем не менее, в алгоритме есть несколько проблем. Прежде всего, вы не меняете ни один из ключевых элементов в цикле. Вы изменяете только first
и last
в цикле, и они там даже не используются, поэтому состояние цикла не меняется.
Так что, я думаю, вы хотели иметь эту строку в начале цикла:
mid = (first +last)/2;
Кроме того, вам нужно проверить очень вероятное событие, что число не существует. что означает добавление этого в начале цикла к:
if (last < first) break;
Что, конечно, означает, что первая точка блока массива прошла последнюю точку, что означает, что размер блока является отрицательным. first == last
может быть допустимым, когда вы доберетесь до последней ячейки в массиве.
И последний пункт - начать last
как размер-1:
int last = nums.Length - 1;
В конце концов, мы говорим об индексах массивов.