意境级讲解二分查找算法、python

文章目录

    • 问题定义
    • 模版一
        • 查找一个数
        • 寻找第一个的满足条件的位置
        • 寻找最后一个的满足条件的值
    • 二分查找的问题变种
      • 把待搜索区间分成两个部分
        • 搜索插入位置
    • 模版二
        • 寻找第一个的满足条件的位置
        • 寻找最后一个的满足条件的值
        • x 的平方根
          • 方法二:牛顿迭代
        • 猜数字大小
        • 搜索旋转排序数组
        • 搜索旋转排序数组 II
        • 第一个错误的版本
        • 寻找峰值
        • 寻找旋转排序数组中的最小值
    • 模板三
        • 在排序数组中查找元素的第一个和最后一个位置
      • 查找最接近且小于 target 的元素
      • 查找最接近且大于 target 的元素
        • 找到 K 个最接近的元素
          • 方法一:排除法(双指针)
          • 方法二:二分查找最优区间的左边界
    • 参考

二分查找又称折半搜索算法。 狭义地来讲,二分查找是一种 在有序数组查找某一特定元素的搜索算法。这同时也是大多数人所知道的一种说法。实际上, 广义的二分查找是将问题的规模缩小到原有的一半。类似的,三分法就是将问题规模缩小为原来的 1/3。

问题定义

给定一个由数字组成的有序数组 nums,并给你一个数字 target。问 nums 中是否存在 target。如果存在, 则返回其在 nums 中的索引。如果不存在,则返回 - 1。

  • 这是二分查找中最简单的一种形式。当然二分查找也有很多的变形,这也是二分查找容易出错,难以掌握的原因。常见变体有:
  • 如果存在多个满足条件的元素,返回最左边满足条件的索引。
  • 如果存在多个满足条件的元素,返回最右边满足条件的索引。
  • 数组不是整体有序的。 比如先升序再降序,或者先降序再升序。
  • 将一维数组变成二维数组。
  • 。。。

接下来,我们逐个进行查看。

前提:

数组是有序的(如果无序,我们也可以考虑排序,不过要注意排序的复杂度)

二分查找中使用的术语:

  • target —— 要查找的值
  • index —— 当前位置
  • left 和 ri

你可能感兴趣的:(大数据,算法和数据结构,机器学习,数据结构,算法,python,人工智能)