首页 > 编程语言 >二分法查找算法优化

二分法查找算法优化

时间:2022-12-28 19:45:00浏览次数:59  
标签:arr min int mid 二分法 算法 查找 key

摘要:使用位运算和减少计算次数的技巧优化二分查找算法。

在《算法——二分法查找》的二分法实现源码binarySearch_2实现中,可以发现计算了两次mid,那有没有办法计算一次呢?另一方面,位运算min + (max - min) >> 1还有其它等价实现方法吗?我带着这两个质疑写出了如下的实现方法,使代码更易读。

/**
     * 根据元素大小进行二分法查找一返回下标
     *
     * @param arr 数组
     * @param key 待匹配的值,看数组中是否存在
     * @return key 在数组中的下标,如果是-1,就说明数组中不存在此元素
     */
    public static int binarySearch_3(int[] arr, int key) {
        // 最小值的下标
        int min = 0;
        // 最大下标,等于数组长度
        int max = arr.length - 1;
        while (min <= max) {
            int mid = (max + min) >> 1;
            if (arr[mid] > key) {
                max = mid - 1;
            } else if (arr[mid] < key) {
                min = mid + 1;
            } else {
                return mid;
            }
        }
        return -1;
    }

瞧一瞧代码是否变得更简练了?老铁,你有更有效的实现策略吗?评论区等着你呢!

标签:arr,min,int,mid,二分法,算法,查找,key
From: https://www.cnblogs.com/east7/p/17011134.html

相关文章

  • 距离产生美?k近邻算法python实现
    微信公众号:AI有道(ID:redstonewill)1.什么是k近邻算法?k最近邻(k-NearestNeighbor,kNN)分类算法是一个比较成熟也是最简单的机器学习(MachineLearning)算法之一。该方法的思......
  • 算法--旅行者过河问题
    1.题目在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够......
  • 【百家稷学】从传统方法到深度学习,人脸算法和应用的演变(河南平顶山学院技术分享)...
    继续咱们百家稷学专题,本次聚焦在人脸方向。百家稷学专题的目标,是走进100所高校和企业进行学习与分享。分享主题本次分享是在河南平顶山学院,主题是《从传统方法到深度学习,人......
  • 【杂谈】如何从数据准备,模型设计与调优,训练到部署完成整个深度学习算法流程...
    文/编辑|言有三对于一个深度学习算法工程师来说,拥有丰富的项目经历当然是重要的,但是拥有完成整个从数据准备到模型上线的能力更加重要。这意味着可以独立承担项目,也是......
  • 【算法专题】分治
    【算法专题】分治点分治与点分树https://oi-wiki.org/graph/tree-divide/点分治:按重心划分子树。在子树内部处理归并子树AcWing252.树https://www.acwing.com/......
  • C语言—实现二分查找(1)
    —,顺序查找和二分查找二:逻辑三,代码实现和结果四,知识点—,顺序查找和二分查找顺序查找:从第一个数字一个一个往后找,直到找到为止。        ag:有一组有序数字:1......
  • 数据结构的算法度量方法
    1.时间复杂度1.时间复杂度是衡量一个算法运行所需的时间,是一个函数,由于执行时间需要经过测试才能得出,而算法执行的时间和执行次数成正比例关系,所以我们的时间复杂度根......
  • MySQL索引背后的数据结构及算法原理
     摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多......
  • PCFG中inside和outside算法详解
    outside值要分为两部分计算:......
  • 每日算法之剪绳子
    JZ14剪绳子描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]*k[2]*........