Мы знаем критерий, когда работает бинарный поиск. Поскольку массив имеет свойство 000..0111..1, мы можем легко использовать здесь бинарный поиск.
В бинарном поиске есть две границы, скажем, они низкие и высокие, где низкий = первый индекс и высокий = последний индекс массива. И в каждом итераторе мы находим средний элемент от низкого до высокого с помощью (низкий + высокий) / 2. Итак, когда мы находим элемент среднего для проверки, что мы можем сделать здесь? Мы можем проверить, является ли оно четным или нет. Если число нечетное, мы можем игнорировать элементы от низкого до среднего индекса, поскольку все элементы от низкого до среднего индекса будут нечетными. В этом случае мы можем изменить нижний граничный минимум до среднего + 1. Теперь, если индекс среднего уровня четный, тогда этот показатель среднего уровня может быть нашим ответом, но ответ может быть между низким и средним показателями - 1. Таким образом, мы снизим нашу более высокую границу до среднего уровня - 1.
Таким образом, мы можем получить минимальный индекс с четным числом.
код:
ans = len(list)
low = 0, high = len(list) - 1
while low <= high:
mid = (low + high) // 2
if list[mid] % 2:
low = mid + 1
else:
ans = mid
high = mid - 1
# here ans is the index of the first even number