• 算法入门(四):二分法的详解与扩展


    原创不易~看完若对你有所帮助,记得点一个赞哈,这就是对我最大的支持了!

    这里主要通过三个问题来引出二分法的基本使用和扩展

    image.png

    问题1-经典二分

    这个二分法最基本的使用,针对有序数组,以两等分方式递归找寻目标数字(通过比较二分值和目标值大小来选择下一次二分区间)

    image.png

    这里时间复杂度是以2为底对数,例如8个数字找1个,最多对半3次 log2^8 = 3

    image.png

    问题2-找某个区间的位置

    image.png

    看到有序,可以想一想二分算法,这里也是可以通过二分来解决的。

    二分,判断二分值(这个位置通过index记录)和3关系,比3大或者等于3,去二分值左侧再二分,否则去右侧二分,同时通过一个变量记录3的最左侧变量位置,每一次二分值为3都进行此变量更新,然后一直递归直到没有数字为止。

    问题3-局部最小值问题

    这个有些难得

    arr无序数组中,告诉你任何两个相邻数字一定不相等,然后定义局部最小:

    image.png

    求数组中任何一个局部最小的index位置,能不能有办法?-- 常规方式就是遍历,一个数一个数的判断是不是比左右都小来实现。

    最好是时间复杂度为O(N)

    image.png

    思想:

    首先需要了解不是有序才能采用二分

    首先判断0和N位置是不是局部最小,不是那么数组趋势如上。

    这时候直接取数组中间位置M,判断是不是局部最小,如果不是,看一下哪边是比M值小的趋势,例如左边M-1更小

    image.png

    接着只需要二分到死,重复上述方式必能找到局部最小,这就一种在无序数组中但是数据有规律可以甩掉一边情况下也是可以二分的

  • 相关阅读:
    万字详解JVM,让你一文吃透
    RAII技术学习
    将轨迹显示到卫星地图上
    实战+代码!Selenium + Phantom JS爬取天天基金数据
    RabbitMQ之延迟队列
    Tomcat部署及优化
    Centos - Mariadb Backup Script 服务搭建
    Vuex 和 Redux 的区别?
    通过SpringBoot实现一个简单的httpServer(详细)
    Web前端编辑器:探索其深度与广度
  • 原文地址:https://blog.csdn.net/sdsh1880gm/article/details/125468030