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。