Binary Search Template
Binary search, 本身的思路并不难,难就难在
- should we use
while left <= rightorwhile left < right? - should we update left pointers as
left = midorleft = mid + 1? - do we return
leftorleft - 1
binary search可以有多种写法,如果每次都写的不一样,就会造成对于结束条件,指针变化的混乱,所以我们要找到一种固定的模板,通过修改模板来解决题目.
Templates
有很多大神的经验,总结出来了很多模版。这里我们根据一些经典binary search题目作为metrics, 来评价一下这个模版的general性.
Template 1: Comment from LC
这个template是704 binary search的editorial下面回复区提供的模版.
def search(self, nums: List[int], target: int) -> int:
lo, hi = 0, len(nums) - 1
while lo < hi:
mid = (lo + hi) // 2
if nums[mid] >= target:
hi = mid
else:
lo = mid + 1
if nums[lo] == target:
return lo
else:
return -1