首页 > 其他分享 >二分查找法 的代码实现(JS版)

二分查找法 的代码实现(JS版)

时间:2023-07-15 21:56:02浏览次数:40  
标签:二分 search return target nums number param JS 查找

递归版本:

const BinarySearch = (function() {
    /**
     * 内部二分查找算法
     * @param {number[]} nums - 有序数组
     * @param {number} l - 左端点
     * @param {number} r - 右端点
     * @param {number} target - 目标数值 
     */
    const search = function(nums, l, r, target) {
        // 如果遍历结束后仍未找到,则返回标识 -1
        if (l > r) {
            return -1;
        }
        // 中位数索引
        const m = l + Math.floor((r - l) / 2);
        // m索引所指数值等于target,说明找到了目标,返回m
        if (nums[m] === target) {
            return m;
        }
        // 如果m处的值小于target,那么则向m右半部(大)查找
        if (nums[m] < target) {
            return search(nums, m + 1, r, target);
        }
        // 如果m处的值大于target,那么则向m左半部(小)查找
        return search(nums, l, m - 1, target);
    };

    return {
        /**
         * 二分查询函数
         * @param {number[]} nums - 待处理的有序数组
         * @param {number} target - 目标值
         * @return {number} 
         */
        search(nums, target) {
            return search(nums, 0, nums.length, target);
        },
    };
})();

 

迭代版本:

const BinarySearch = (function() {
    return {
        /**
         * 二分查询函数
         * @param {number[]} nums - 待处理的有序数组
         * @param {number} target - 目标值
         * @return {number} 
         */
        search(nums, target) {
            let l = 0;
            let r = nums.length;
            // 在给定数组的[l, r]范围内查找target,l至r之间没有元素时,终止循环
            while (l <= r) {
                // 中位数索引
                const m = l + Math.floor((r - l) / 2);
                // 匹配,则返回目标值索引
                if (nums[m] === target) {
                    return m;
                }
                // 当前值小于目标值,转到右半部分(大)查找,l指针移动到 m + 1 处
                if (nums[m] < target) {
                    l = m + 1;
                }
                // 当前值大于目标值,转到左半部分(小)查找,r指针移动到 m - 1 处
                else {
                    r = m - 1;
                }
            }
            // 未找到,返回-1
            return -1;
        },
    };
})();

 

标签:二分,search,return,target,nums,number,param,JS,查找
From: https://www.cnblogs.com/fanqshun/p/17557045.html

相关文章

  • Threejs物体缩放与旋转
    目录1scale设置缩放2rotation设置旋转2.1旋转动画3综合上述代码物体的缩放与旋转是我们经常要操作的方式。1scale设置缩放因为物体的scale属性是vector3对象,因此按照vector的属性和方法,设置x/y/z轴方向的缩放大小。//例如设置x轴放大3倍、y轴方向放大2倍、z轴方向不变c......
  • python,质谱数据,加噪声后用小波神经网络,二分类预测
    #库的导入importnumpyasnpimportpandasaspdimportmath#激活函数deftanh(x):return(np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))#激活函数偏导数defde_tanh(x):return(1-x**2)#小波基函数defwavelet(x):return(math.cos(1.75*x))*(np.......
  • JS BOM了解
    概述BOM(BrowserObjectModel)浏览器对象模型,就是操作浏览器的一些能力,可以操作的内容如下:获取一些浏览器相关信息(窗口大小)操作浏览器的滚动条浏览器的信息(浏览器的版本)让浏览器出现一个弹窗(alert,confirm,prompt)BOM的核心就是window对象,window是浏览器的一个对象,里面包含......
  • JS 数组操作
    JS数组操作如下://at(),用于接收一个整数值并返回该索引对应的元素,允许正数和负数。负整数从数组中的最后一个元素开始倒数constarr=[{name:'a',age:15},{name:'b',age:12},{name:'c',age:13},{name:'d',age:12},{name:'e',age:12}];console.log(ar......
  • js
    1.js基础1.1js书写位置内部js外部js***请注意,外部js标签内编写的js代码并不执行。***行内js1.2js注释和结束符js注释分类:单行注释://多行注释:/**/js结束符:;(英文状态下的分号)***请注意,js结束符并不是必须的,可以加,也可以不加,但是建议编写时统一。***1.3......
  • WQS二分/带权二分/凸包优化
    WQS二分/带权二分/凸包优化应用范围限制个数:给定一些物品和选物品的限制条件,要求刚好选\(m\)个,让你最大化(最小化)权值。单调性:选的物品越多,权值越大(越小)。分析1.原理解释:假设限制不固定,当选\(x\)个时,最大权值为\(f(x)\)。算法的核心就是将“选取物品”这一操作赋......
  • Threejs控制物体移动
    目录1控制物体移动1.1每一帧修改一点位置形成动画2综合上述代码1控制物体移动前面我们创建了物体,为了让物体移动起来。我们可以设置它的position属性进行位置的设置。相机和立方体都是物体。每个物体都是1个对象。在官方文档里,我们可以看到相机camera和物体mesh都继承Obje......
  • 手撸一个js 的npm 包
    手撸一个js的npm包打包后的格式commonjsvsesmodulevsAMDvsIIFEvsUMDcommonjs早期社区js模块化的一种方式,适用于nodejs端,为了能够在浏览器中运行,可以借助Browserify,将commonjs风格的js代码转换成可以在浏览器中运行的代码.它的代码风格如下:varsome=require('mo......
  • 数据结构 查找 红黑树查找
    1.红黑树的定义红黑树可以看作是对平衡二叉树的进一步改进。平衡二叉树的一个缺点在于插入和删除操作中为了维持平衡会消耗很大的执行代价,降低效率。红黑树的结构是在平衡二叉树的平衡标准上稍微放宽得到的。红黑树的定义:......
  • python ValueError: No JSON object could be decoded
    解决“pythonValueError:NoJSONobjectcouldbedecoded”问题概述在Python开发中,我们经常会遇到处理JSON数据的情况。然而,在处理JSON数据时,有时会遇到ValueError:NoJSONobjectcouldbedecoded的错误。这个错误通常发生在尝试将字符串解析为JSON对象时,但字符串无效或无......