1 题目
地址:https://leetcode-cn.com/problems/binary-search/
2 我的提交
时间复杂度的log(n),空间为O(1)
直接二分查找,毕竟题目都说了,嘿嘿,这里需要注意的有两点
1 mid的取值,要注意每一次和target对比之后,都需要让low = mid +1 或者high = mid -1,不能直接让high或者mid等于mid
2 出口应该是low > high,因为low和high是可以相等的
class Solution:
def search(self, nums: List[int], target: int) -> int:
low = 0
high = len(nums) - 1
mid = (low + high)//2 # 转换成整数,这里 // 相当于向下取整
while low <= high: # 出口
if nums[mid] == target:
return mid
if nums[mid] < target:
low = mid + 1 # 这里要注意是+1
mid = (low + high)//2
else:
high = mid - 1 # 这里是 -1 不是直接等于mid
mid = (low + high)//2
return -1
我上面的代码写法是在左闭右闭的基础上的,还有左闭右开的情况
class Solution:
def search(self, nums: List[int], target: int) -> int:
left,right = 0, len(nums) # 这里要注意,右边变成了一个取不到的值
while left < right:
mid = (left + right) // 2
if nums[mid] < target:
left = mid+1
elif nums[mid] > target:
right = mid # 右边只是等于mid
else:
return mid
return -1