
求解代码
java
public int[] twoSum(int[] numbers, int target) {
for(int i=0;i<numbers.length;i++){
int left = i+1;
int right = numbers.length-1;
//二分查找是闭区间 [left, right],等号保证最后一个元素被检查,避免漏查
while (left<=right) {
int mid = left+((right-left)>>1);
if(target-numbers[i]==numbers[mid]){
return new int[]{i,mid};
}else if(target-numbers[i]>numbers[mid]){
left=mid+1;
}else{
right=mid-1;
}
}
}
return new int[]{-1,-1};
}
小贴士
前文【哈希】两数之和 是使用哈希做的,这次利用有序的特性,通过二分的方法完成。