二分查找主要针对有序、无重复元素的数组
易错点:区间的定义及闭合
给定一个
n
个元素有序的(升序)整型数组nums
和一个目标值target
,写一个函数搜索nums
中的target
,如果目标值存在返回下标,否则返回-1
。
- 左闭右闭
当num[mid] >/< target时,num[mid]一定不等于target,又是闭区间,所以要-/+1
class Solution:
def search(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums)-1
while left <= right:
middle = left+(right-left)//2
if nums[middle] > target:
right = middle-1
elif nums[middle] < target:
left = middle+1
elif nums[middle] == target:
return middle
return -1
- 左闭右开
当num[mid] >/< target时,num[mid]一定不等于target,但是左闭右开,更新right时不需要-1,但更新left时要+1
class Solution:
def search(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums)
while left < right:
middle = left+(right-left)//2
if nums[middle] > target:
right = middle
elif nums[middle] < target:
left = middle+1
elif nums[middle] == target:
return middle
return -1