zoukankan      html  css  js  c++  java
  • 二分查找

    • 版本1

      当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。

      C++ 代码模板:

     1 int bsearch_1(int l, int r)
     2 {
     3     while (l < r)
     4     {
     5         int mid = l + r >> 1;
     6         if (check(mid)) r = mid;
     7         else l = mid + 1;
     8     }
     9     return l;
    10 }
    • 版本2

      当我们将区间[l, r]划分成[l, mid - 1]和[mid, r]时,其更新操作是r = mid - 1或者l = mid;,此时为了防止死循环,计算mid时需要加1。

      C++ 代码模板:

     1 int bsearch_2(int l, int r)
     2 {
     3     while (l < r)
     4     {
     5         int mid = l + r + 1 >> 1;
     6         if (check(mid)) l = mid;
     7         else r = mid - 1;
     8     }
     9     return l;
    10 }
    • 浮点数二分

      用mid去界定l 和 r 时不需要加减1

     1 #include <iostream>
     2 #include <vector>
     3 
     4 using namespace std;
     5 
     6 double a;
     7 
     8 double f(double m){
     9     if(m < 0)m = 0 - m;
    10     //浮点数二分l 和 r 不需要加减一
    11     double l = 0, r = 1000;
    12     //这里的意思就是精确到小数点后6位
    13     while(r - l > 1e-7){
    14         double mid = (l + r) / 2;
    15         if(mid*mid*mid < m)l = mid;
    16         else r = mid;
    17     }
    18     
    19     return r;
    20 }
    21 
    22 int main(){
    23     cin >> a;
    24     if(a < 0)
    25         printf("-%f",f(a));
    26     else
    27         printf("%f",f(a));
    28     return 0;
    29 }

    作者:yxc
    链接:https://www.acwing.com/blog/content/31/
    来源:AcWing

  • 相关阅读:
    java9
    java8
    java7
    java6
    java5
    java4
    java-list-分组
    Termux中安装gcc-7/gfortran-7实操过程,安装成功可以编译Fortran,c/c++
    安卓手机牛逼软件Termux中安装Archlinux,安装Jdk
    c++语言的组合类的使用,用组合类的方法计算两点间距离。
  • 原文地址:https://www.cnblogs.com/sxq-study/p/12021084.html
Copyright © 2011-2022 走看看