python中的二分查找算法bisect
docs.python.org
在解决leetcode中的第0300题时看到的一个用法
class Solution(object):
def lengthOfLIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
tail = []
for num in nums:
idx = bisect.bisect_left(tail, num)
if idx == len(tail):
tail.append(num)
else:
tail[idx] = num
return len(tail)
这里用到了bisect,很新奇,记录学习一下。(官网文档看的太少了/(ㄒoㄒ)/~~)
1.bisect.bisect
在这里使用数组时数组应该是有序的,index的值表示应该插在数组哪里的下标。
2.bisect.insort
insort会将数值插入nums中,并保持有序
3.bisect.bisect_left
处理有相等的值得情况下返回左边的下标,bisect.bisect_right
则相反
4.bisect.insort_left
与bisect.insort_right
也是相同的道理