题解 | #二分查找-II#
二分查找-II
http://www.nowcoder.com/practice/4f470d1d3b734f8aaf2afb014185b395
两次二分查找,一次查是target,一次查不是target
def search(self , nums: List[int], target: int) -> int:
# write code here
l,r = 0,len(nums)-1
while l <= r:
mid1 = (l+r)//2
if nums[mid1] == target:
while l <= mid1:
mid2 = (l+mid1)//2
if nums[mid2] == target:
mid1 = mid2 - 1
else:
l = mid2 + 1
return l
elif nums[mid1] < target:
l = mid1 + 1
elif nums[mid1] > target:
r = mid1 - 1
return -1