Two Sum II - Input array is sorted
Total Accepted: 441 Total Submissions: 1017
Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.
You may assume that each input would have exactly one solution.
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2
解法一:使用二分法
class Solution {
public int[] twoSum(int[] numbers, int target) {
int resualt[] =new int[2];
for (int i =0;i<numbers.length-1;i++){
int k =BinarySearch(numbers,target-numbers[i],i);
if (k>0){
resualt[0]=i+1;
resualt[1]=k+1;
return resualt;
}
}
return null;
}
public int BinarySearch(int[] arr,int target,int index){
int lo = index+1, hi = arr.length - 1;
while (lo <= hi) {
int m = (lo + hi) >> 1;
if (arr[m] < target) {
lo = m + 1;
} else if (arr[m] > target) {
hi = m - 1;
} else {
return m;
}
}
return -1;
}
}
解法二:使用对撞指针
class Solution {
public int[] twoSum(int[] numbers, int target) {
if(numbers==null || numbers.length < 1) return null;
int l=0,h=numbers.length-1;
while(l<h){
if(numbers[l]+numbers[h]>target){
h--;
}else if(numbers[l]+numbers[h]<target){
l++;
}else{
return new int[]{l+1,h+1};
}
}
return null;
}
}