题目
题目及示例
我的题解
二分查找
class Solution {
public int[] twoSum(int[] numbers, int target) {
int left;
int right;
int mid = 1;
for (int i = 0; i < numbers.length; i++) {
left = i + 1;
right = numbers.length - 1;
while (left <= right) {
mid = left + (right - left) / 2;
if (target - numbers[i] < numbers[mid]) {
right = mid - 1;
} else if (target - numbers[i] > numbers[mid]) {
left = mid + 1;
} else {
break;
}
}
if (left <= right) {
return new int[] {i+1, mid+1};
}
}
return new int[] {mid, mid + 1};
}
}
双指针
class Solution {
public int[] twoSum(int[] numbers, int target) {
int left = 0;
int right = numbers.length - 1;
while (left < right) {
if (numbers[left] + numbers[right] == target) {
return new int[] {left + 1, right + 1};
} else if (numbers[left] + numbers[right] > target) {
right--;
} else {
left++;
}
}
return new int[2];
}
}