leetcode刷题---二分查找
力扣题目链接
二分查找算法使用前提:有序数组;数组内无重复元素
易错点:
1.while循环的边界条件:如到底是 while(left < right) 还是 while(left <= right)
2.if条件后right,left的取值:到底是 right = middle - 1还是 right = middle
二者取决于区间的使用:是左闭右闭还是左闭右开,如左闭右闭区间,left == right 符合区间
因此while循环使用while(left <= right);if条件后right的取值,if nums[middle] > target,则nums[middle]一定取不到target,则right = middle - 1
from typing import List
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) // 2if 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 # 未找到目标值#测试样例
nums = [-1,0,3,5,9,12]
target = -1
#创建对象
s =Solution()
#调用该方法
print(s.search(nums,target))