Untitled

 avatar
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...