python⼆分查找模板
经常会遇到需要进⾏⼆分查找的情境,python中的bict很好⽤,当⽆法使⽤这个库的时候,可以⾃⼰⼿动实现。
下⾯的代码⽚段实现了“查找target第⼀次出现的位置”,以及“第⼀个⼤于target的值的位置”两个功能,如果要找target最后⼀次出现的位置,可以在“第⼀个⼤于target的值的位置”的基础上减⼀。工程造价审计
如果第⼀次查找11,left和right都等于7(即数组的长度,因为11不存在于数组arr中),需要⼿动判断。
blah blah blah下⾯的代码适⽤于剑指offer《在排序数组中查找数字》
import bict
arr =[5,7,7,8,8,9,10]
# i,j辅助使⽤
i, j =0,len(arr)
# left、right是需要搜索的
# left表⽰第⼀个等于target的值的位置
# right表⽰第⼀个⼤于target的值的位置
left =0
right =len(arr)
# ⽬标值,假设需要找到数组中第⼀个等于8的值,以及第⼀个⼤于8的值
target =8
# i永远等于mid加1
联系的英文# j永远等于mid
# 当搜索left时,第⼀个条件为arr[mid]<target:i=mid+1
# 当搜索left时,第⼀个条件为target<arr[mid]:j=mid
while i < j:
光棍节英语怎么说
mid =(i + j)//2
同性恋英语if arr[mid]< target:
i = mid +1
abigaleleft = i
el:
j = mid
i =0
j =len(arr)
while i < j:
mid =(i + j)//2
if target < arr[mid]:
permitting
j = mid
adolescence
right = j
el:
i = mid +1日语初次见面怎么说
# 可以看到结果相同,第⼀次出现8的位置是3
print(bict.bict_left(arr,8))
digitprint(left)
# 可以看到,第⼀次⼤于8的位置是5
print(bict.bict_left(arr,9))
print(right)