在有序数组中查找某一特定元素的搜索算法。
ex: 0 - 100 中找到我心中想的数;
时间复杂度:
最坏时间复杂度:O(logn)
最优时间复杂度:O(1)
平均时间复杂度:O(logn)
空间复杂度:O(1)
def binary_search(arr, key):start = 0end = len(arr) - 1while start <= endmid = (start + end) / 2if arr[mid] < key:start = mid + 1elif arr[mid] > key:end = mid - 1else:return midreturn -1
常见问题:
- 查找第一个/最后一个与target相等的元素
- 查找最后一个丁小雨target/第一个大于target的元素
- 查找最后一个小于等于target/第一个大于等于target的元素
- 数组的旋转(4, 5, 6, 1, 2, 3)
