Отбор корректных версий ПО до первой проблемной

Перебирайте версии в заданном порядке и остановитесь на первом True от is_bad_version. Верните срез до этой позиции; если дефектов нет, верните копию всего списка.

Короткий ответ

Что ответить на собеседовании

Перебирайте версии в заданном порядке и остановитесь на первом True от is_bad_version. Верните срез до этой позиции; если дефектов нет, верните копию всего списка.

Подробный разбор

Ответ с пояснениями

Условие

Дан массив версий программного обеспечения, среди которых одна (или более) может быть дефектной. Существует функция is_bad_version(version) — возвращающая True, если переданная версия содержит ошибку, и False в противном случае. Требуется реализовать функцию, получающую список версий и возвращающую новый список, состоящий из всех элементов, предшествующих первой найденной ошибочной версии (саму ошибочную версию и все последующие элементы включать не нужно).

Пример 1: Ввод: versions = ["1.0", "1.1", "1.2"], при этом is_bad_version("1.1") = True. Вывод: ["1.0"]

Пример 2: Ввод: versions = ["2.0", "2.1", "2.2"], при этом is_bad_version("2.0") = True. Вывод: []

Ответ

Перебирайте версии в заданном порядке и остановитесь на первом True от is_bad_version. Верните срез до этой позиции; если дефектов нет, верните копию всего списка.

Линейный вариант не требует монотонности дефектов:

def versions_before_bad(versions):
    for index, version in enumerate(versions):
        if is_bad_version(version):
            return versions[:index]
    return versions.copy()

При дефекте первой версии результат пуст. Порядок списка сохраняется, строки версий не сортируются. Бинарный поиск допустим только при дополнительной гарантии, что после первой плохой версии все последующие тоже плохие. В данном условии такой гарантии нет, поэтому подменять проход бинарным поиском нельзя.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее