DEV Community

Wenqi Jiang
Wenqi Jiang

Posted on

Binary Search Templates Final Version

You need to write it over and over again

Find the first number bigger than target

/**
 * return the first number bigger than target
 *
 * @param nums   0, 1, 2, 3, 4, 5, 6, 7
 * @param target 5
 * @return 6
 */
private int binarySearchTargetRight(int[] nums, int target) {
    int l = 0, r = nums.length - 1;
    while (l < r) {
        int mid = l + r >> 1;
        if (nums[mid] > target) {
            r = mid;
        } else {
            l = mid + 1;
        }
    }
    return l;
}

Enter fullscreen mode Exit fullscreen mode

Find the last number smaller than target

/**
 * return the last number smaller than target
 *
 * @param nums   0, 1, 2, 3, 4, 5, 6, 7
 * @param target 5
 * @return 4
 */
private int binarySearchTargetLeft(int[] nums, int target) {
    int l = 0, r = nums.length - 1;
    while (l < r) {
        int mid = l + r + 1 >> 1;
        if (nums[mid] < target) {
            l = mid;
        } else {
            r = mid - 1;
        }
    }
    return l;
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)