方法一 双指针
class Solution {
public int [ ] twoSum ( int [ ] numbers, int target) {
if ( numbers == null || numbers. length == 0 ) {
return null;
}
int l = 0 ;
int r = numbers. length - 1 ;
int [ ] num = new int [ 2 ] ;
while ( l < r) {
if ( numbers[ l] + numbers[ r] == target) {
num[ 0 ] = l + 1 ;
num[ 1 ] = r + 1 ;
return num;
}
if ( numbers[ l] + numbers[ r] > target) {
r-- ;
} else {
l++ ;
}
}
return null;
}
}
方法而二 二分查找
class Solution {
public int [ ] twoSum ( int [ ] numbers, int target) {
for ( int i = 0 ; i < numbers. length; ++ i) {
int low = i + 1 , high = numbers. length - 1 ;
while ( low <= high) {
int mid = ( high - low) / 2 + low;
if ( numbers[ mid] == target - numbers[ i] ) {
return new int [ ] { i + 1 , mid + 1 } ;
} else if ( numbers[ mid] > target - numbers[ i] ) {
high = mid - 1 ;
} else {
low = mid + 1 ;
}
}
}
return new int [ ] { - 1 , - 1 } ;
}
}