Untitled
unknown
python
4 years ago
1.6 kB
4
Indexable
def search_br_index(nums, left, right): print('search_br_index', right <= left, left, right) if len(nums[left:right]) <= 1: return len(nums) // 2 if nums[right - 1] < nums[right - 2]: return right - 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): print('search_target', right <= left, left, right) if right <= left: return -1 mid = (left + right) // 2 print('nums[mid] == target', nums[mid] == target) if nums[mid] == target: print(1, mid) return mid elif target > nums[mid]: print(2) search_target(nums, target, mid, right) else: print(3) search_target(nums, target, left, mid) def broken_search(nums, target) -> int: br_index = search_br_index(nums, 0, len(nums)) print(br_index) if nums[br_index] == target: return br_index elif target > nums[br_index] and br_index != len(nums) - 1: index = search_target(nums, target, br_index, len(nums)) print('search_target(nums, target, br_index, len(nums))', index) return index else: index = search_target(nums, target, 0, br_index + 1) print('search_target(nums, target, 0, br_index + 1)', index) return 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...