美文网首页
二分查找(变体)

二分查找(变体)

作者: 小杨不是小羊 | 来源:发表于2020-06-21 16:37 被阅读0次

今天写4种二分查找的变体分别是
查找第一个值等于给定值的元素
查找最后一个值等于给定值的元素
查找第一个值大于等于给定值的元素
查找最后一个值小于等于给定值的元素
虽说是是4种,但是原理上第一个和第二个、第三个和第四个原理都是相同的,这里我只会写第一种和第三种的代码。

查找第一个值等于给定值的元素

int searchFirstEqual(int arr[], int length, int value) {
    int low, middle, high;
    low = 0;
    high = length - 1;

    while(low <= high) {
        middle = low + ((high - low) >> 1);
        if(arr[middle] == value) {
            if ((0 == middle) || (value != arr[middle - 1]))
            {
                return middle;
            } else {
                high = middle - 1;
            }
        } else if(arr[middle] > value) {
            high = middle - 1;
        } else {
            low = middle + 1;
        }
    }

    return -1;
}

重点

如果当前值等于要查找的元素这时我们就判断它是否是第一个元素或者它前一个元素的值不等于给定值,满足上述条件它就是第一个值等于给定值的元素。
如果它之前有元素且值等于给定值这时我们就将 high 更新为 middle - 1;

查找第一个值大于等于给定值的元素

int searchFirstLessEqual(int arr[], int length, int value) {
    int low, middle, high;
    low = 0;
    high = length - 1;

    while(low <= high) {
        middle = low + ((high - low) >> 1);
        if (arr[middle] >= value)
        {
            if (0 == middle || arr[middle - 1] < value)
            {
                return middle;
            } else {
                high = middle - 1;
            }
        } else {
            low = middle + 1;
        }
    }

    return -1;
}

重点

如果当前元素大于等于给定值这时我们就判断它是否是第一个元素或者它前一个元素的值不大于等于给定值,满足上述条件就直接返回当前元素的下标。
如果它之前有元素且大于等于给定值,这时我们就更新 high = middle - 1;

变体的二分查找就写到这了

二分查找的代码看上去很简单,但是写的时候容易忽略细节。

都看到这了,点个赞再走啊~

相关文章

  • 二分查找&变体

    二分查找其实占用的内存比较少,但是如果是寻找给定值的数据时,二分查找虽然占用内存小,但是用散列表或者二叉搜索树代替...

  • 二分查找(变体)

    今天写4种二分查找的变体分别是查找第一个值等于给定值的元素查找最后一个值等于给定值的元素查找第一个值大于等于给定值...

  • 【算法打卡60天】Day14二分查找(下):如何快速定位IP对应

    学习内容:四种常见的二分查找变形问题1.变体一:查找第一个值等于给定值的元素2.变体二:查找最后一个值等于给定值的...

  • 二分查找以及变体

    标准二分查找 使用场景 排序的数组(排序,且支持随机读取) 不大不小的数据, 大了的话,数组太大,木有那么大的连续...

  • 二分查找的变体

    二分查找在已经排序好的数组中寻找某个值。它是最常见的O(lgn)时间复杂度算法。 标准写法 大学教科书上只会给出一...

  • 二分查找的几种变体

    在一个有序数组中查找某个元素,采用二分查找是非常高效的,其查找只需要 O(logn) 的时间复杂度就可以了。如果数...

  • 二分查找(变体)代码框架

    1.说明 前面介绍了二分查找代码框架[https://www.jianshu.com/p/6423f7367615...

  • 二分查找的4种变体

    在基本的二分查找法中,我们规定给定数组是不重复且有序的(一般为升序),这几个变体的规则有些变化,仍然是升序元素,但...

  • 二分查找

    使用场景:下标随机访问元素的顺序表,有序,数据量适中(过小顺序查找,过大连续内存不够)二分法变体:查找第一个给定值元素。

  • python二分查找算法

    文章概述 二分查找法介绍 简单查找与二分查找对比 二分查找  二分查找算法主要思想:在有序列表中查找指定元素,先从...

网友评论

      本文标题:二分查找(变体)

      本文链接:https://www.haomeiwen.com/subject/npkaxktx.html