Untitled
unknown
python
3 years ago
1.1 kB
6
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...