此文看了labuladong的一篇公众号一篇文章归纳出的模板,感谢labuladong大佬带我刷题
也是刷了一道题:https://leetcode-cn.com/problems/search-insert-position/
才发现自己连最基础的二分查找都有些拎不清,现在来总结一下最容易错的边界条件点:
- right = len(nums) -1 还是 right = len(nums)?
- while left<=right 还是 while left < right?
- +1/-1?
right = len(nums)就是大家通常说的左闭右开,[left, right),相对应的while left < right, 因为这样在left=right就退出但是左闭右开没有这种情况,退出之后区间无list元素
right = len(nums) - 1, 左闭右闭, 相对应while left <= right,同样推出后区间无元素
这里方便记就只写左闭右闭的情况,方便作为模板使用。
二分查找一般分三种: 1.直接查找 2. 找左边界 3.找右边界
这三种主要区别就是target == nums[middle]时+1 -1 还是直接返回
本题显然是求左边界问题:
- 左边界
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums)-1
while left <= right:
middle = left + (right-left)//2

本文通过分析一道LeetCode题目,总结了二分查找容易出错的边界条件,探讨了left=right时的不同处理方式,以及区分左闭右闭、左闭右开两种情况。同时,阐述了二分查找的三种类型:直接查找、找左边界、找右边界,并以左边界查找为例进行说明。
最低0.47元/天 解锁文章
2969





