Вернуть индекс заданного числа, либо - 1, если данного числа нет в отсортированном списке (двоичный поиск)

Дан отсортированный по возрастанию список чисел и некоторое заданное число. Верните индекс заданного числа в списке или -1, если данное число отсутствует в нем.

Написал следующий код:

class Solution:  
    def search(self, nums, target: int):
        mid = len(nums) // 2
        low = 0
        high = len(nums) - 1
        while nums[mid] != target and low <= high:
            if target > nums[mid]:
                low = mid + 1
            else:
                high = mid - 1
                mid = (low + high) // 2

        if low > high:
            return '-1'
        else:
            return mid

При следующих значениях:

Sample Input: [2,3] 2

Sample Output: 0

Всё работает, как надо. Однако, когда меняю инпут, например, на список из трёх чисел и ищу в нем число, которого нет, то выдает "Time limit exceeded". Не могу понять, где ошибка, чтобы исправить. Буду очень благодарен за исправления и помощь!


Ответы (1 шт):

Автор решения: n1tr0xs

Вы сделали лишний отступ в строке mid = (low + high) // 2
Т.е. должно быть так:

class Solution:  
    def search(self, nums, target: int):
        mid = len(nums) // 2
        low = 0
        high = len(nums) - 1
        while nums[mid] != target and low <= high:
            if target > nums[mid]:
                low = mid + 1
            else:
                high = mid - 1
            mid = (low + high) // 2

        if low > high:
            return '-1'
        else:
            return mid
→ Ссылка