二分法是查找时间复杂度较低的算法之一:o(log n),实际上就是寻找low high中间位置的值,不断增大low,缩小high的值来缩小范围。
整体结构为:
low=0
high=len(nums)-1
while low<=high: #此处若是high=len(nums) 不加=
i=low+int((high-low)/2)
if nums[i[<target:
low=low+1
elif nums[i]>target:
high=high-1
else:
return i
个人认为本题是二分查找较为有难度的题,因为要求了时间复杂度(符合条件常用的有折半查找,幂查找,欧几里得),此处寻找左右边界各使用一次二分查找。此处以右边界为例,左边界同理
实际上的改变就是else语句处,写个数组即可理解。
力扣上同类型的还有35.搜索插入位置
34.在排序数组中查找元素的第一个和最后一个位置
69.x 的平方根
367.有效的完全平方数等