python 搞清楚二分查找边界条件

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

此文看了labuladong的一篇公众号一篇文章归纳出的模板,感谢labuladong大佬带我刷题

也是刷了一道题:https://leetcode-cn.com/problems/search-insert-position/
才发现自己连最基础的二分查找都有些拎不清,现在来总结一下最容易错的边界条件点:

  1. right = len(nums) -1 还是 right = len(nums)?
  2. while left<=right 还是 while left < right?
  3. +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 还是直接返回

本题显然是求左边界问题:

  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
      
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值