https://blog.youkuaiyun.com/qq_55364042/article/details/130098343?spm=1001.2014.3001.5501
衔接二分的第一题(可去上面的网址查找),这一题正是第1题的两个公式的运用
想象我们的l和r,若取(l+r)//2,那么就要用 l=mid+1,r=mid
若取(l+r+1)//2,那么就要用l=mid,r=mid-1
总共要进行两次二分查找,找左边界时,最终状态为:自l向左不包括l都是小于k的,自r向右包括r
都是大于等于k的。找右边界则反之
#在一个递增序列中查找某数的范围,以下标表示
arr=[int(i) for i in input().split()]
a=int(input())#要查找的数
l,r=0,len(arr)-1
while l<r:
mid=(l+r)//2
if arr[mid]<a:
l=mid+1
else:
r=mid
if arr[l]!=a:
print(-1)
else:
print(l,end=' ')
l,r=0,len(arr)-1
while l<r:
mid=(l+r+1)//2
if arr[mid]>a:
r=mid-1
else:
l=mid
print(l)
4265

被折叠的 条评论
为什么被折叠?



