方法一 双指针
class Solution {
public int[] twoSum(int[] numbers, int target) {
if(numbers == null || numbers.length == 0) {
return null;
}
int l = 0;
int r = numbers.length - 1;
int[] num = new int[2];
while(l < r) {
if(numbers[l] + numbers[r] == target) {
num[0] = l + 1;
num[1] = r + 1;
return num;
}
if(numbers[l] + numbers[r] > target) {
r--;
}else {
l++;
}
}
return null;
}
}
方法而二 二分查找
class Solution {
public int[] twoSum(int[] numbers, int target) {
for (int i = 0; i < numbers.length; ++i) {
int low = i + 1, high = numbers.length - 1;
while (low <= high) {
int mid = (high - low) / 2 + low;
if (numbers[mid] == target - numbers[i]) {
return new int[]{
i + 1, mid + 1};
} else if (numbers[mid] > target - numbers[i]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
}
return new int[]{
-1, -1};
}
}