项目空间

学习笔记N-036

二分

更新
内容块
10
阅读
约 1 分钟
路径
学习笔记 / C++ / C++算法

最简实现

代码块Plain Text
int low = 1;
int high = 101;
while (low <= high){
    int middel = (low + high)/2;
    if(dansui(middle)){            //蛋碎说是
        high = middle - 1;
    }else{
     low = middle + 1;
    }
 }
 low

1.在有序数组中查找是否存在目标

2.在有序数组中寻找第一个大于等于目标的下标

3.最多将数组分为M组,每组之和不超过X,求X的最小值

(特殊)连续实数写法

代码块C++
    const double eps = 1e-6;
    double lo = -3, hi = 3;
    while (lo + eps < hi) {
        double mid = (lo + hi) / 2;
        if (match(mid)) {
            hi = mid;
        } else {
            lo = mid;
        }
    }