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;
}