二分法中mid的处理以及STL二分函数

若我们需要在单调递增序列中找 x 或 x 的后继 的 mid 计算方法:

         实现   使用场合 可能出现的问题        
mid = (left + right) / 2

left >= 0, right >= 0,

left + right无溢出

left + right可能溢出

负数情况下有向0取整问题

mid = left + (right-left)/2 right - left 无溢出      若right 和left都是大数且一正一负,right - left可能溢出
mid = (left + right) >> 1 left + right无溢出 若left和right都为大数,left + right可能溢出

三种方法各有优缺点,综合起来,mid = (left + right) >> 1 更好一些

若需要找 x 或 x 的前驱,则用 mid = (left + right + 1) >> 1 即可

关于对应的STL函数:

(1)upper_bound() : 查找第一个大于 x 的元素的位置,pos = upper_bound(a, a + n, x) - a;

(2)lower_bound() : 查找第一个等于或大于 x 的元素;

(3)upper_bound() - lower_bound() : 计算单调序列中 x 的个数。

相关推荐

  1. 二分法mid处理以及STL二分函数

    2023-12-14 04:16:03       51 阅读
  2. 二分 以及例题

    2023-12-14 04:16:03       27 阅读
  3. 二分查找小细节

    2023-12-14 04:16:03       38 阅读
  4. 19-二分-值域二分-有序矩阵第 K 小元素

    2023-12-14 04:16:03       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-14 04:16:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-14 04:16:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-14 04:16:03       82 阅读
  4. Python语言-面向对象

    2023-12-14 04:16:03       91 阅读

热门阅读

  1. 使用c++版本的itk计算二值三维图像的表面

    2023-12-14 04:16:03       62 阅读
  2. 光伏发电技术的应用领域有哪些?

    2023-12-14 04:16:03       63 阅读
  3. 【js或momentJs获取当前月的起止日期】

    2023-12-14 04:16:03       63 阅读
  4. 智能查券机器人:导购APP的新趋势

    2023-12-14 04:16:03       59 阅读
  5. Linux中的磁盘挂载与取消

    2023-12-14 04:16:03       58 阅读
  6. 【FPGA】篮球比赛计分器

    2023-12-14 04:16:03       51 阅读
  7. RocketMQ的监控和管理工具有哪些❓

    2023-12-14 04:16:03       62 阅读
  8. python 多进程

    2023-12-14 04:16:03       48 阅读
  9. mysql select count 非常慢

    2023-12-14 04:16:03       53 阅读