#07 中等

题目描述

在一个已排序的列表中使用二分查找算法查找目标值,返回其索引。如果目标值不存在,返回 -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(不存在)