Untitled
unknown
python
4 years ago
1.1 kB
14
Indexable
def search_br_index(nums, left, right):
print('first', right <= left, left, right)
if right <= left:
return -1
mid = (left + right) // 2
if nums[mid] < nums[mid - 1]:
return mid
else:
search_br_index(nums, left, mid)
search_br_index(nums, mid, right)
def search_target(nums, target, left, right):
if right <= left:
return -1
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif target > nums[mid]:
search_target(nums, target, mid, right)
elif target < nums[mid]:
search_target(nums, target, left, mid)
def broken_search(nums, target) -> int:
br_index = search_br_index(nums, 0, len(nums))
if nums[br_index] == target:
return br_index
elif target > nums[br_index]:
return search_target(nums, target, br_index, len(nums))
elif target < nums[br_index]:
return search_target(nums, target, 0, br_index)
def test():
arr = [1, 2, 3, 5, 6, 7, 9, 0]
result = broken_search(arr, 3)
print(result)
assert result == 2
test()
Editor is loading...