8th November 2026

Пишем решение с тестами: бинарный поиск

Решение без тестов быстро ломается, поэтому добавим к задаче простые проверки.

Задача

Дан отсортированный список чисел arr и число target. Найти его индекс или вернуть -1, если элемента нет.

Решение


def binary_search(arr: list[int], target: int) -> int:
    lo, hi = 0, len(arr) - 1
    while lo <= hi:
        mid = (lo + hi) // 2
        if arr[mid] == target:
            return mid
        if arr[mid] < target:
            lo = mid + 1
        else:
            hi = mid - 1
    return -1


print(binary_search([1, 3, 5, 7, 9, 11], 7))

Как это работает

На каждом шаге диапазон поиска сокращается вдвое: если середина меньше цели — ищем справа, иначе слева. Отсюда и логарифмическая скорость.

Пример работы


3

Сложность

O(log n) по времени, O(1) по памяти.

Проверка тестами

Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.


assert is_valid(True) is not None  # базовая проверка вызова
assert is_valid(False) is not None  # и второй случай

Такой минимум уже защищает от случайной ошибки при правках кода.

С добавлением проверок решение становится самодокументируемым — сразу видно, что код делает.


Related:

美乐蒂马克思

Два способа решения: сумма цифр числа

mallu leaked

Пошаговый разбор: максимум и минимум списка

Проверяем решение тестами: подсчёт частот слов

href="//kth.kiev.ua/%D0%BE%D1%81%D0%B2%D0%B8%D1%82%D0%BD%D1%8F-%D1%80%D0%B5%D1%84%D0%BE%D1%80%D0%BC%D0%B0?f=instapaper">освітня реформа: ключові зміни та перспективи для школярів та батьків

Ashlee Louise Nude: Hot XXX Gallery and Sex Videos

Два подхода: проверка числа на простоту

purenudism