二分搜索是一种高效的查找算法,适用于在已排序的数组中查找特定元素。它的基本思想是通过不断将搜索区间对半分割,从而快速缩小查找范围。
二分搜索每次把搜索区域减少一半,时间复杂度为 O(logn)(n代表集合中元素的个数)。
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1;
while (left <= right) {
int mid = (right - left) / 2 + left;
if (nums[mid] == target) {
return mid;
}
else if (nums[mid] < target) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return -1;
}
};
函数定义:search 函数接收一个数组 nums 和目标值 target。
初始化左右边界:left 初始化为 0,right 初始化为数组长度减一。
循环条件:当 left 小于或等于 right 时,继续搜索。
计算中间索引:使用 left + (right - left) / 2 计算中间索引,避免溢出。
比较中间元素:检查中间元素是否等于目标值,如果等于则返回中间索引。
调整边界:根据中间元素与目标值的大小关系,调整左边界或右边界。
未找到目标值:当循环结束且未找到目标值时,返回 -1。