Алла ошиблась при копировании из одной структуры данных в другую. Она хранила массив чисел в кольцевом буфере. Массив был отсортирован по возрастанию, и в нём можно было найти элемент за логарифмическое время. Алла скопировала данные из кольцевого буфера в обычный массив, но сдвинула данные исходной отсортированной последовательности. Теперь массив не является отсортированным. Тем не менее, нужно обеспечить возможность находить в нем элемент за 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)