Алла ошиблась при копировании из одной структуры данных в другую. Она хранила массив чисел в кольцевом буфере. Массив был отсортирован по возрастанию, и в нём можно было найти элемент за логарифмическое время. Алла скопировала данные из кольцевого буфера в обычный массив, но сдвинула данные исходной отсортированной последовательности. Теперь массив не является отсортированным. Тем не менее, нужно обеспечить возможность находить в нем элемент за O(logn).
Можно предполагать, что в массиве только уникальные элементы.
Формат ввода
Функция принимает массив натуральных чисел и искомое число k. Длина массива не превосходит 10000. Элементы массива и число k не превосходят по значению 10000.
Формат вывода
Функция должна вернуть индекс элемента, равного k, если такой есть в массиве (нумерация с нуля). Если элемент не найден, функция должна вернуть −1.
def broken_search(nums, target) -> int:
left_border = 0
right_border = len(nums) - 1
while left_border <= right_border:
middle = (left_border + right_border) // 2
if nums[middle] == target:
return middle
if nums[left_border] <= nums[middle]:
if nums[left_border] <= target < nums[middle]:
right_border = middle - 1
else:
left_border = middle + 1
else:
if nums[middle] < target <= nums[right_border]:
left_border = middle + 1
else:
right_border = middle - 1
return -1
arr = [19, 21, 100, 101, 1, 4, 5, 7, 12]
broken_search(arr, 5)