JavaScript-二分法详解

2023-11-10

二分法

二分法又可以被称为二分查找,它描述了在有序集合中搜索特定值的过程。广义的二分查找是将问题的规模尽可能的缩小到原有的一半。

二分查找(非递归实现)

var searchRange = function (nums, target) {
    let start = 0, end = nums.length - 1
    while (start <= end) {
        let mid = Math.floor((start + end) / 2)
        if (nums[mid] == target) {
            return mid
        } else if (nums[mid] > target) {
            end = mid - 1
        } else if(nums[mid] < target){
            start = mid + 1
        }
    }
    return -1
};

二分查找(递归实现)

var searchRange = function (nums, target) {
    let start = 0, end = nums.length - 1
    let mid = - 1
    // 递归函数体,也可以封装最外层函数,就是递归传的参数多一点
    function df(start, end) {
        // 递归终止条件
        if (start > end) return -1
        mid = Math.floor((start + end) / 2)
        if (nums[mid] == target) {
            return mid
        } else if (nums[mid] > target) {
            df(start, mid - 1)
        } else if (nums[mid] < target) {
            df(mid + 1, end)
        }
    }
    df(start, end)
    return mid
}

二分排序

复杂度分析

  • 平均时间复杂度: O(logN)
  • 最坏时间复杂度: O(logN)
  • 最优时间复杂度: O(1)

推荐文章

你真的会写二分查找吗?

经典例题

1 求数组中的最大元素的二分递归算法

let a =[4,6,7,8]
function solution(a,l,r){
   let mid = Math.floor((l+r)/2),max1,max2
   if(l<r){
       max1 = solution(a,l,mid)
       max2 = solution(a,mid+1,r)
       return (max1>max2)?max1:max2
   }else return a[l];
}
console.log(solution(a,0,3));

2 快排
选定一个基准数,要使得基数的左边的数字全部小于它,右边的数字全部大于它。分别设i和j从左右开始寻找,从左边找到第一个比基数大的数,从右边找到第一个比基数小的数,然后交换这两个数。当i和j相遇时,交换基数和i。再以同样的方式处理两边的数组。

const quickSort = (arr, s, e) => {
    if (arr.length <= 1) return
    if (s >= e) return
    let p = arr[s]
    let i = s
    let j = e
    while (i != j) {
        while (arr[j] >= p && i < j) {
            j--
        }
        while (arr[i] <= p && i < j) {
            i++
        }
        if (i < j) {
            let temp = arr[i]
            arr[i] = arr[j]
            arr[j] = temp
        }
    }
    arr[s] = arr[i]
    arr[i] = p
    quickSort(arr, s, i - 1)
    quickSort(arr, i + 1, e)
}
var arr = [6, 1, 2, 7, 9, 3, 4, 5, 10, 8]
quickSort(arr, 0, arr.length - 1)
console.log(arr)

3.二路归并排序
转载详解

力扣习题

力扣704:二分查找
力扣278:第一个错误版本

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript-二分法详解 的相关文章

  • libxmljs 的替代品 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 目标 使用 Node js 访问网页 使用 xpath 语法操作 DOM 并打印新的 DOM libxm
  • 如何按多个项目搜索/过滤列表?

    我正在寻找一个示例 或者可能是一个关于通过在文本框中输入的多个项目来过滤 搜索项目列表的方法的一点提示 假设我有一个列表 ul li Coffee li li Tea li li Milk li li Water li li Juice l
  • 如何设置上传的文件名?

    By using multer I made it to request image file like this 这个文件存储在我设置的 上传 文件夹中 我的代码如下 var multer require multer var uploa
  • 我可以动态创建/销毁 Vue 组件吗?

    因此 我正在创建一个相当复杂的 Vue 应用程序 它从后端 API 获取数据并将其显示在前端 具体取决于用户选择的过滤器 它的默认设置是立即显示所有内容 然后一旦用户选择过滤器 它就会拉出不具有这些属性的 卡片 组件 直到今天 一切都很顺利
  • 为什么隐式符号到字符串转换会导致 JavaScript 中出现类型错误?

    有一个 toString on Symbol在 ES6 中 它返回字符串表示形式Symbol 但想知道为什么 Symbol 不起作用 运行这个表达式会抛出TypeError我没想到 后者只是打电话吗 toString 在一个新的Symbol
  • 您可以将现有的 div 复制到模式对话框吗

    我有一个带有多个面板的仪表板来显示不同的信息 我希望能够添加一个按钮来以模式显示面板 我正在使用引导程序 我所能找到的只是已经编写的模态 我想复制作为面板的 div 标签的内容 然后将其显示在模型中 但我不确定如何进行 该面板的 html
  • 使用命名的成功/错误回调在 AngularJS 中声明一个 Promise

    我正在尝试做一些与 http 服务非常相似的事情 根据我的理解 http 返回一个 Promise 对象 使用它时 语法是 http success function data success callback error function
  • Angularjs 完整日历不显示事件

    我正在用那个https github com angular ui ui calendar https github com angular ui ui calendar在 Angularjs 中使用 FullCalendar 它显示日历并
  • 限制 Dropzone 仅上传特定类型的文件

    我正在使用 Dropzone 上传文件 这是我的代码 div div
  • JavaScript:常量属性

    在javascript中 我可以将对象的属性声明为常量吗 这是一个示例对象 var XU Cc Components classes or function aXU this Cc Components classes var XU new
  • 窗口大小调整触发的 DOM 事件

    我有一个布局相当复杂的页面 最初打开页面时 某些元素的对齐存在问题 但是 可以通过更改浏览器窗口的大小来 永久 解决此问题 显然 我不希望用户必须调整浏览器窗口的大小才能使页面正确显示 所以我想知道是否有一种方法可以在页面首次加载时以编程方
  • 带有 mkdocs 的本地 mathjax

    我想在无法访问互联网的计算机上使用 MathJax 和 Mkdocs 因此我不能只调用 Mathjax CDN Config mkdocs yml site name My Docs extra javascript javascripts
  • 类型“void”不可分配给类型“((event:MouseEvent) => void) |不明确的'

    import as React from react import App css import PageTwo from components PageTwo export interface IPropsk data Array
  • 将 onclick 事件应用于页面加载时不存在的元素

    我将列表样式设置为看起来像选择框 并且当用户单击列表中的元素时我想触发一个函数 但是该元素是通过加载的AJAX因此 当页面加载并且我无法绑定时不存在onclick事件到它onDomReady 如果我把它作为一个普通的选择列表 我可以只标记一
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • 尝试使用 Firebug 查找 JavaScript 文件中的函数

    我试图找到这个函数调用 myFooBar 该函数在某些 HTML 中内联引用 但页面加载了大量 JavaScript 并且在每个文件中搜索该函数需要相当多的工作 如何使用 Firebug 找到此函数所在的 JavaScript 文件 打开脚
  • 根据特定字符获取整个字符串或子字符串

    我有一个包含 MIME 类型的字符串 例如application json 现在我想将其与实际的 HTTP 标头进行比较 在本例中content type 如果标头包含 MIME 类型 那么就很简单 if mimeType contentT
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相
  • Javascript 中 if 语句中的假值?

    过去两周 我在学校研究 JavaScript 的事情已经有一段时间了 而且我一直在做我的作业 在 Douglas Crockford 所著的 JavaScript The Good Parts 一书中 作者在第 11 页上列出了 if 语句
  • DOM 解析器 Chrome 扩展内存泄漏

    问题 我开发了一个扩展程序 可以拦截 Web 请求 获取 Web 请求来源的 HTML 并对其进行处理 我使用 DOMParser 来解析 HTML 并且意识到 DOMParser 正在导致大量内存泄漏问题 最终导致 chrome 扩展崩溃

随机推荐

  • 机器学习中的特征变量及处理总结

    文章目录 1 定性特征变量 1 1 定类变量处理 1 2 定序变量处理 2 定量特征变量 3 总结 牢记一句话 数据和特征决定了机器学习的上限 而模型和算法只是逼近这个上限而已 机器学习的根本目标 就是用数据的特征变量去对目标变量进行预测
  • Github 榜首!B 站疯传!程序员思维导图 48 张!!!

    介绍在下面 整个内容包括 程序员史上最强编程思维导图 48 张 800 份求职简历模板 我写的 图解算法小册 解析 150 道高频算法面试题目 25k star Github 榜首项目 资料获取地址 无套路 直接可以下载 Github 榜首
  • Jmeter快速上手之接口测试

    目录 1 前言 2 简介 3 安装 4 环境变量 4 1 Windows环境 4 2 Mac环境 5 启动程序 6 目录说明 7 操作示例 7 1 Get请求 7 2 Post请求 7 3 依赖请求 1 前言 压测工具 Jmeter 除了可
  • 什么是接口?

    1 什么是接口 接口是一种特殊的内部类 它里面的所有方法都没有实现 2 接口的特点 1 接口中成员默认访问修饰符都是public 即便你不写 2 定义接口必须interface关键字完成 3 接口中可以定义变量 但是变量必须有固定的修饰符修
  • JUC并发编程--------线程安全篇

    目录 什么是线程安全性问题 如何实现线程安全 1 线程封闭 2 无状态的类 3 让类不可变 4 加锁和CAS 并发环境下的线程安全问题有哪些 1 死锁 2 活锁 3 线程饥饿 什么是线程安全性问题 我们可以这么理解 我们所写的代码在并发情况
  • java自引用/类的递归调用问题

    Java的自引用问题 什么是自引用 递归调用 代码示例和分析 自引用情况 类比C 什么是自引用 递归调用 在编写代码的过程中 我们经常看到类中出现该类的声明 示例 class A int data A a 这种情况就被称为自引用 代码示例和
  • Android架构项目代码结构规范--组件化代码

    前言 组件化和插件化有什么区别 虽说网上有很多文章但是讲清的聊聊无几 这也是这篇文章的由来 大方向 组件化是一个项目主管设计管理项目架构方案 而插件化有商务上的合作和局部功能热更换修复等 小方向 如果是公司app合作 组件化也就是插件化作为
  • CLion Bug集合1:windows下导入openssl库方法以及踩过的坑

    系统 win10 64位 工具链 MinGW IDE CLion openssl库下载 下载方法 主要有两种方式 本文主要讲解方式1 方式1 下载地址 2022 6 1补充 该方法的动态库是MinGW64位用的 32位见方法2 方式2 编译
  • linux常用命令案例总结wc,top,free,df -h,head,sed,awk,netstat -antp,ps -aux, ethtool eth0

    1 wc的使用 统计一个目录下的文件个数 root localhost etc cd var log root localhost log ll grep wc l 53 root localhost log 拓展 关于命令wc的使用 wc
  • 使用冻结层进行迁移学习

    使用冻结层进行迁移学习 在yolov5的训练过程中 作者介绍了如何使用冻结层实现迁移学习的策略 具体可以参考官方话题 Transfer Learning with Frozen Layers Issue 1314 ultralytics y
  • JS中的Date数据类型

    JS的Date数据类型 在JavaScript中 Date数据类型用于处理日期和时间 它可以表示自1970年1月1日00 00 00 UTC 协调世界时 以来的毫秒数 Date对象在许多应用程序中都非常有用 例如在Web应用程序中显示当前时
  • Python实现HBA混合蝙蝠智能算法优化循环神经网络回归模型(LSTM回归算法)项目实战

    说明 这是一个机器学习实战项目 附带数据 代码 文档 视频讲解 如需数据 代码 文档 视频讲解可以直接到文章最后获取 1 项目背景 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法 是一种搜索全局最优解的有效方法 该算法基于迭代优
  • eMMC简介

    eMMC是embedded MultiMediaCard的简称 MultiMediaCard 即MMC 是一种闪存卡 Flash Memory Card 标准 它定义了MMC的架构以及访问Flash Memory的接口和协议 而eMMC则是
  • 全屏dialog

    下面是iOS里面做全屏Dialog的代码 调用show时Dialog会覆盖当前的controller 全屏显示 可以用来做蒙板效果 欢迎转载 转载请注明出处 http blog csdn net tadican article detail
  • Python中的装饰器是什么?装饰器是如何工作的?

    Python很早就引入了装饰器 在PEP 318中 作为一种简化函数和方法定义方式的机制 这些函数和方法在初始定义之后必须进行修改 这样做的最初动机之一是 使用classmethod和staticmethod等函数来转换方法的原始定义 但是
  • hibernate映射继承关系(一):一张表对应一整棵类继承树

    翻译 hibernate映射继承关系 一 一张表对应一整棵类继承树 2人收藏此文章 我要收藏发表于1年前 2012 05 22 16 34 已有 482次阅读 共 0个评论 英文原址 网上这个主题的文章不在少数 这个系列的文章的部分价值在于
  • 【100%通过率 】【华为OD机试 c++】最多等和不相交连续子序列【 2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 最多等和不相交连续子序列 给定一个数组 我们称其中连续的元素为连续子序列 称这些元素的和为连续子序列的和 数组中可能存在几组连续子序列 组内的连
  • NexT主题进阶

    NexT 是 Hexo 框架中最为流行的主题之一 精于心 简于形 NexT 支持多种常见第三方服务 使用 第三方服务 来扩展站点的功能 除了 Markdown 支持的语法之外 NexT 借助 Hexo 提供的 tag 插件 为您提供在书写文
  • EDK2安装教程

    1 1基础搭建 相关文件请自行百度下载 1 安装VS2015到C盘 请勿修改默认目录 否则需要修改C edk2 Conf tools def txt 2 如安装包所示 安装python2 7到C盘并设置环境变量如下 3 将nasm解压到C
  • JavaScript-二分法详解

    文章目录 二分法 二分查找 非递归实现 二分查找 递归实现 二分排序 复杂度分析 推荐文章 经典例题 力扣习题 二分法 二分法又可以被称为二分查找 它描述了在有序集合中搜索特定值的过程 广义的二分查找是将问题的规模尽可能的缩小到原有的一半