6.两数之和II-输入有序数组
方法一:双指针
class Solution {
public int[] twoSum(int[] numbers, int target) {
int left = 0,right = numbers.length - 1;
while(left <= right){
int sum = numbers[left] + numbers[right];
if(sum == target){
return new int[]{left,right};
}
else if(sum < target){
left++;
}else{
right--;
}
}
return new int[]{-1,-1};
}
}
方法二:二分查找
class Solution {
public int[] twoSum(int[] numbers, int target) {
for(int i = 0 ;i < numbers.length;i++){
int left = i + 1,right = numbers.length - 1;
while(left <= right){
int mid = left + (right - left) / 2;
if(numbers[mid] == target - numbers[i]){
return new int[]{i,mid};
}else if(numbers[mid] > target - numbers[i]){
right = mid - 1;
}else{
left = mid + 1;
}
}
}
return new int[]{-1,-1};
}
}