标准二分查找左边界模板

二分查找作为程序员的一项基本技能,是面试官最常使用来考察程序员基本素质的算法之一,也是解决很多查找类题目的常用方法,它可以达到 O(logN) 的时间复杂度。

前提条件

必须有序。一般是从小到大有序。

坑点

计算中间值导致的数据越界。一般我们都是定义左边界(left)和右边界(right)都使用 int 类型,如果 left 和 right 足够大,mid = (left + right)/2,可能会由于 left+right 导致 int 数据类型越界。所以安全的写法是 mid = left + ((right - left) >> 1) 或者 mid = left + (right - left) / 2,推荐使用右移操作,因为右移比除法快。

模板代码

实现类似 STL 的 lower_bound() 函数功能。

C++模板代码

int lower_bound(int *A, int l, int r, int val) { // [l, r)
    while (l<=r) {
        int mid = l + ((r-l)>>1);
        if(A[mid]>=val) {
            r = mid-1;
        } else {
            l = mid+1;
	}
    }

    return l;
}

你可能感兴趣的:(OI,#,查找,二分查找左边界模板,二分,模板,左边界)