Two Sum II

The input array is sorted. Binary search solution. Time complexity: O(nlgn).

public int[] twoSum(int[] numbers, int target) {
    for (int i = 0; i < numbers.length; i++) {
        int pair = bsearch(numbers, i + 1, target - numbers[i]);
        if (pair != -1) {
            return new int[] {i + 1, pair + 1};
        }
    }
    return null;
}

private int bsearch(int[] numbers, int left, int target) {
    int right = numbers.length - 1;

    while (left <= right) {
        int mid = (left + right) / 2;
        if (numbers[mid] == target) {
            return mid;
        } else if (numbers[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return -1;
}