二分查找
二分查找
什么情况用二分算法
对于数组f[x]或者函数f(x)
- 给出x,容易求Y
- 给出Y,不容易求x
- 函数单调
泛型情况下可以把小于目标值看成0,大于等于目标值看成1,问题就转化成查找第一个1的情况。
int binary_search_find_first_one(vector<int> nums, int target) {
int head = 0, tail = nums.size(), mid;
while(head < tail) { //当用head和tail来定位目标位置的时候,用<,最终位置就是head的值
mid = (head + tail) / 2;
if(nums[mid] < target) head = mid + 1; //当小于target的时候,mid不可能是目标位置
else tail = mid; //当大于等于target的时候,可能是目标位置,tail不能+1
}
return haed;
}

浙公网安备 33010602011771号