题目描述
在一个已排序的列表中使用二分查找算法查找目标值,返回其索引。如果目标值不存在,返回 -1。
示例
输入:arr = [1, 3, 5, 7, 9, 11, 13], target = 7
输出:3(元素 7 的索引为 3)
提示
使用左右指针(left, right)逐步缩小搜索范围。每次比较中间元素与目标值,决定搜索左半部分还是右半部分。
参考答案
def binary_search(arr, target):
"""二分查找"""
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1 # 搜索右半部分
else:
right = mid - 1 # 搜索左半部分
return -1 # 未找到
# 测试
arr = [1, 3, 5, 7, 9, 11, 13]
print(binary_search(arr, 7)) # 3
print(binary_search(arr, 1)) # 0
print(binary_search(arr, 13)) # 6
print(binary_search(arr, 4)) # -1(不存在)