📅  最后修改于: 2023-12-03 14:54:49.445000             🧑  作者: Mango
题目描述:给定一个大小为 n 的有序数组,使用 O(log n) 时间复杂度查找元素 x 是否存在于数组中。
这是一道经典的二分查找问题,一般用于在有序数组中搜索指定的元素。
最笨的办法是使用线性搜索,这样需要O(n)的时间复杂度才能完成。优化后可以使用二分查找,使用 O(log n) 的时间复杂度即可完成。
二分查找需要有序数组,每次将数组对半分,检查中间的值是否等于目标值。如果目标值等于中间值,就返回它的下标;如果目标值小于中间值,就在左半部分继续查找;否则,在右半部分继续查找。
以下是二分查找的代码实现:
def binary_search(arr, x):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == x:
return mid
elif arr[mid] < x:
low = mid + 1
else:
high = mid - 1
return -1
当然,这只是一种简单的实现,还有许多其他的优化方式可以提高效率,例如使用递归实现、使用位运算代替除法运算等方法。
总之,二分查找是一种高效的搜索算法,可以在大多数情况下快速地搜索有序数组中的元素,并使用 O(log n) 常数的时间复杂度实现。