Python使用Bisect二分查找
二分查找最关键的问题是边界问题,如果自己实现一定要注意左右边界的含义。
对于一个有序序列而言,bisect.bisect_left(a, x, [lo=0, hi=len(a)])
找到索引i
,满足下列条件:
- a[:i]<x
- a[i:]>=x
如何理解这个bisect_left的left?
当出现多个重复数字的时候,比如[1,2,2,2,3]
,使用bisect.bisect_left
,得到的index是1,它位于相同数字的最左端,可以理解为偏左搜索。
Api
bisect_left()
bisect_right()
insort_left()
insort_right()