二分搜索总结
Basic Binary Search
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] < target:
left = mid + 1
elif nums[mid] > target:
right = mid - 1
else:
return mid
return left
几个需要注意的点:
- 循环结束条件是
<=
。 - 为避免死循环,每次循环都需要改变上下界的值。
- 如果
target
不存在,结束时状态一定为left > right
且二者相差一,这时left
的位置就是应该插入的索引。 - Java和Cpp中
(left + right) / 2
可以写为left + (right - left) / 2
。