704.二分查找
题目:
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在 返回下标,否则返回 -1
。
二分查找的前提条件:
- 数组是有序的
- 数组中的元素无重复
-
二分法的关键点:明确范围的边界,一般是采取左闭右闭**[left,right]的方式和左闭右开[left,right)**
-
基本思想:在范围内,比较其中值与目标值的大小关系,进而进行范围的调整,最值确定目标。
代码实现
class Solution:
def search(self, nums: List[int], target: int) -> int:
left, right = 0, len(nums) - 1 # 定义target在左闭右闭的区间里,[left, right]
while left <= right:
middle = left + (right - left) // 2
if nums[middle] > target:
right = middle - 1 # target在左区间,所以[left, middle - 1]
elif nums[middle] < target:
left = middle + 1 # target在右区间,所以[middle + 1, right]
else:
return middle # 数组中找到目标值,直接返回下标
return -1 # 未找到目标值