Binary Search 小结

147 阅读1分钟

Binary Search常用模版

int binarySearch(vector<int> &vec, int target) {

    int left = 0, right =vec.size();

    while (left < right) {
        int mid = left + (right - left) / 2;
        if (vec[mid] < target) left = mid + 1;
        else right = mid;
    }

    return left;
}

此处while内的条件为 vec[mid] < target, 最终left指向大于等于target的第一个元素的位置。参考lower_bound的实现。如果要找到最后一个小于target的元素的位置,可使用以上结果减1。

如果将while内的条件更改为 vec[mid] <= target, 最终left指向大于target的第一个元素的位置。参考upper_bound的实现。如果要找到最后一个小于等于target的元素的位置,可使用以上结果减1。