704. 二分查找 - 力扣(LeetCode)
可以使用 二分查找 来实现这个功能,时间复杂度为 O(log n)。下面是 Python 代码:
def binary_search(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
# 测试示例
nums = [-1, 0, 3, 5, 9, 12]
target = 9
print(binary_search(nums, target)) # 输出: 4
设定两个指针 left
和 right
,分别指向数组的起始和终止位置。
计算中间位置 mid
,检查 nums[mid]
是否等于 target
:
若相等,直接返回 mid
。
若 nums[mid] < target
,说明 target
在右半部分,调整 left = mid + 1
。
若 nums[mid] > target
,说明 target
在左半部分,调整 right = mid - 1
。
继续循环,直到 left > right
,如果未找到目标值,返回 -1
。
这种方法在 有序数组 中查找目标值,效率很高!