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

  • 相关阅读:
    RIFF格式简介
    获取控制台窗口句柄GetConsoleWindow
    控制台编程基础总结
    控制台访问权限、别名及注意事项
    控制台输入输出机制实例
    控制台输入输出机制
    控制台基础概念实例
    STL之std::set、std::map的lower_bound和upper_bound函数使用说明
    wcout输出中文不显示
    控制台基础概念
  • 原文地址:https://www.cnblogs.com/sxq-study/p/12021084.html
Copyright © 2011-2022 走看看