[算法模板]二分查找
二分查找
1 简介
二分查找是在有序表中搜索元素的算法,比较常见。需要注意的就是二分的前提是有序,否则无法应用二分查找。
2 算法模板
以升序为例,二分查找C++模板如下:
/*
二分查找C++模板
@param vec : 升序数组
@param left : 左边界下标,能取到
@param right : 右边界下标,取不到,即[left, right)
@param target : 目标值
@return ans : target在vec中下标,若没有ans则为-1
*/
int BinarySearch(vector<int> vec, int left, int right, int target)
{
int mid;
int res = -1;
while (left < right) {
mid = left + (right - left) / 2;
if (vec[mid] == target) {
res = mid;
break;
} else if (vec[mid] > target) {
right = mid; // [left, mid)区间继续寻找
} else {
left = mid + 1; // [mid + 1, right)区间继续寻找
}
}
return res; // -1表示未找到target
}
3 例题
Leetcode 74 Search a 2D Matrix
4 参考资料
[1] 算法竞赛入门经典(第二版)