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