二分查找存在两个场景,第一种就是在排好序的列表中进行查询,是否存在目标数 target,返回布尔类型,第二种是插入的情况,我需要把数插入到列表中,返回idx。
查询
def find(sortlist, lenn, target):
left, right = 0, lenn - 1
while left <= right:
mid = (right + left) // 2
midnum = sortlist[mid]
if midnum < target:
left = mid + 1
elif midnum > target:
right = mid - 1
else:
return True
return False
写法二:
def find(sortlist, lenn, target):
left, right = 0, lenn - 1
while left < right:
mid = (right + left) // 2
midnum = sortlist[mid]
if midnum < target:
left = mid + 1
elif midnum > target:
right = mid
else:
return True
return False
插入
这边只展示右插入的情况,返回的是插入的位置
def bisect_right(sortlist, lenn, addval):
left, right = 0, lenn
while left < right:
mid = (left + right) // 2
if addval < sortlist[mid]:
right = mid
else:
left = mid + 1
return left
同样的,逆序插入
def getaddidx(curstones, stone):
left, right = 0, len(curstones)
while left < right:
mid = (left + right) // 2
if curstones[mid] < stone: #不同之处
right = mid
else:
left = mid + 1
return left

这篇博客探讨了二分查找在两种场景下的使用:一种是在有序列表中查询目标数值,返回布尔值;另一种是确定数值在列表中的插入位置。文章通过两个函数实现,分别展示了如何高效地进行查询和右插入操作,强调了查询和插入的效率优势。

1373

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



