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