在有序数组中查找某一特定元素的搜索算法。

    ex: 0 - 100 中找到我心中想的数;

    时间复杂度:
    最坏时间复杂度:O(logn)
    最优时间复杂度:O(1)
    平均时间复杂度:O(logn)
    空间复杂度:O(1)

    1. def binary_search(arr, key):
    2. start = 0
    3. end = len(arr) - 1
    4. while start <= end
    5. mid = (start + end) / 2
    6. if arr[mid] < key:
    7. start = mid + 1
    8. elif arr[mid] > key:
    9. end = mid - 1
    10. else:
    11. return mid
    12. return -1

    常见问题:

    • 查找第一个/最后一个与target相等的元素
    • 查找最后一个丁小雨target/第一个大于target的元素
    • 查找最后一个小于等于target/第一个大于等于target的元素
    • 数组的旋转(4, 5, 6, 1, 2, 3)