Вернуть индекс заданного числа, либо - 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