二分查找的三种写法

查找第一个不大于x的值

bool BinarySearch(int i, int j, vector<int> nums, int target) {
    while (i < j) {
        int mid = (j - i) / 2 + i;
        if (nums[mid] <= target)
            i = mid;
        else
            j = mid - 1;
    }
    return i;
}

查找第一个不小于x的值

bool BinarySearch(int i, int j, vector<int> nums, int target) {
    while (i < j) {
        int mid = (j - i) / 2 + i;
        if (nums[mid] == target)
            return true;
        else if (nums[mid] > target)
            j = mid - 1;
        else
            i = mid + 1;
    }
    return false;
}

模板

bool BinarySearch(int i, int j, vector<int> nums, int target) {
    while (i < j) {
        int mid = (j - i) / 2 + i;
        if (nums[mid] == target)
            return true;
        else if (nums[mid] > target)
            j = mid - 1;
        else
            i = mid + 1;
    }
    return false;
}
int main() {
    vector<int> nums{1, 2, 2, 3, 5, 6};

    int x = BinarySearch(0, 5, nums, 4);
    cout << nums[x];
}

posted @ 2021-03-30 21:00  tao10203  阅读(109)  评论(0)    收藏  举报