二分查找

二分查找

什么情况用二分算法

对于数组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;
}
posted @ 2022-01-18 13:41  hellozhangjz  阅读(31)  评论(0)    收藏  举报