题目要求:
在一个排序好的数组中寻找target 并返回target的起始index
如不存在 则返回[-1,-1]
要求时间时间复杂度为O(logn)
思路:
显然看到复杂度为logn需要利用二分查找
!!!二分查找踩坑!!!!
之前对于二分查找只是粗略的理解概念,知道对于logn的时间复杂度需要利用二分查找并没有完整的写过详细代码
所以这一次写的时候对于边界处理不够仔细 经常会出现死循环的问题
记录一下二分查找的一般思路
首先找到首尾L,R = 0,len(nums)
之后mid = (L+R)//2
这里//为向下取整
所以在L,R更新值的时候取左mid
即nums[i]>=target的时候 R = mid
nums[i]<target 时 L= mid+1
这里必须要有一个为mid+1
否则会一直陷入死循环
!!!二分查找踩坑!!!
这道题需要两次二分查找 首先在range(0,lens)之间查找target的起始位置
然后在range(index_begin,lens)之间查找结束位置
前者为左mid 后者为右mid 需要进行区分
查找右mid时 因为python中//为向下取整
所以计算mid时需要(L+R+1)//2 加上一后强行向上取整
class