
求解代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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};
}
|
小贴士
前文【哈希】两数之和 是使用哈希做的,这次利用有序的特性,通过二分的方法完成。