二分查找的几种情况汇总

        在学习算法和刷leetcode的过程中,二分查找是一种非常常见的算法。功能方面,它将查找的复杂度从o(n)降成了o(lgn)。使得查找效率大大提高。在leetcode中,有诸多关于二分查找的变体。因此,掌握好二分查找是非常有必要的。但是,在实际学习过程中,对于二分可能出现的各种情况,我查阅了很多博客和文章,大家给出的代码不统一,也大多没有给出详细的解释。所以,有一段时间,二分算法的几种情况在我脑中乱糟糟的。今天终于花了一些时间把这些情况理清楚了。所以将这几种情况写在这里,以便复习。

        二分查找的主要情况分成7中情况:

        1. 查找对应target位置(返回对应位置,没找到则返回-1)

        2. 查找第一个大于或等于target的位置(返回对应位置,没找到则返回-1)

        3. 查找第一个大于target的位置(返回对应位置,没找到则返回-1)

        4. 查找最后一个小于等于target的位置(返回对应位置,没找到则返回-1)

        5. 查找最后一个小于target的位置(返回对应位置,没找到则返回-1)

        6. 查找第一个等于target的位置(返回对应位置,没找到则返回-1)

        7. 查找最后一个等于target的位置(返回对应位置,没找到则返回-1)

 

        另外,本文中都是在数组的闭区间内进行查找,而且默认数组已经是增序排列。

        

<
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二分查找和二叉树查找是两种不同的查找算法,它们之间有一些区别。 1. 数据结构: - 二分查找是基于有序数组的查找算法。它要求在查找之前,数据必须按照升序或降序排列。 - 二叉树查找是基于二叉树的查找算法。它要求数据必须存储在一个二叉树数据结构中。 2. 查找效率: - 二分查找的时间复杂度是 O(log n),其中 n 是数组的长度。它通过不断缩小查找范围来快速定位目标值。 - 二叉树查找的时间复杂度取决于二叉树的高度,如果二叉树是平衡的,时间复杂度为 O(log n),其中 n 是树中节点的数量。但如果二叉树是不平衡的,最坏情况下时间复杂度可能达到 O(n)。 3. 插入和删除操作: - 二分查找只适用于静态数据集,即不能进行插入和删除操作。如果需要频繁地插入和删除元素,需要重新构建有序数组。 - 二叉树查找可以支持动态数据集,可以在树中高效地插入和删除节点。 4. 空间复杂度: - 二分查找的空间复杂度是 O(1),因为它只需要几个变量来保存索引和边界值。 - 二叉树查找的空间复杂度取决于树的高度,平衡二叉树的空间复杂度是 O(log n),而非平衡二叉树的空间复杂度可能达到 O(n)。 总结起来,二分查找适用于静态有序数组的查找,效率高但不能插入和删除元素。二叉树查找适用于动态数据集的查找,可以支持插入和删除操作,但效率可能受到树的平衡性影响。选择哪种算法取决于具体的应用场景和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值