二分查找的优雅写法 / 在排序数组中二分寻找一个数的出现次数/范围/第一次出现/最后一次出现

本文介绍了二分查找在排序数组中的应用,详细阐述了如何通过二分查找求解不同问题,如找到第一个大于等于查找值的位置、第一个大于查找值的位置、最后一个小于等于查找值的位置,以及确定一个值的出现范围和次数。通过提供的示例,展示了二分查找在实际操作中的优雅写法。
摘要由CSDN通过智能技术生成

二分查找的优雅写法


根据返回值的要求不同,二分查找有以下几种(假定我们在一个整数数组中查找某个value)

0 二分查找的分类

有下面几种形式的要求:

  1. 如果存在,返回true,否则返回false。
  2. 如果存在,返回第一次出现的索引值,否则返回-1。
  3. 如果存在,返回第一次出现的索引值,否则返回-(1 + 可插入的位置)。可插入的位置指的是第一个大于等于查找值位置的索引。
  4. 如果存在,返回第一次出现的索引和最后一次出现的索引,否则返回[-1, -1]

所有的要求都可以用下面将要讲到的lowerupper函数解决:

1 求第一个大于等于查找值的位置

我们在前开后闭区间[first, last)中递归地查找,返回第一个大于等于value的位置;如果所有数字都小于value,那么返回last
这个返回值实际上也是value应该插入的位置。

int lower(int[] array, int value) {
   
    int first = 0, last = array.length;
    while (first < last) {
    // 当[fisrt, last)非空时
        int mid =<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值