二分查找

188 阅读1分钟

查找指定的数

这个是最简单的,也是我们最熟悉的,即搜索一个数。如果存在,返回下标,否则返回-1。

int binarySearch(int[] nums, int target) {
    int left = 0, right = nums.length - 1;
    while (left <= right) {  //注意
        int mid = left + ((right - left) >> 1);
        if (nums[mid] == target)
            return mid;
        else if (nums[mid] < target)
            left = mid + 1;  //注意
        else if (nums[mid] > target)
            right = mid - 1;  //注意
    }
    return -1;
}

查找左边界

int left_bound(int[] nums, int target) {
    int left = 0, right = nums.length;  //注意
    while (left < right) {  //注意
        int mid = left + ((right - left) >> 1);
        if (nums[mid] == target)
            right = mid;  //注意
        else if (nums[mid] < target)
            left = mid + 1;
        else if (nums[mid] > target)
            right = mid;  //注意
    }
    return left;
}

查找右边界

int left_bound(int[] nums, int target) {
    int left = 0, right = nums.length;  //注意
    while (left < right) {  //注意
        int mid = left + ((right - left) >> 1);
        if (nums[mid] == target)
            left = mid + 1;  //注意
        else if (nums[mid] < target)
            left = mid + 1;
        else if (nums[mid] > target)
            right = mid;
    }
    return left - 1;  //注意
}