方法1: 二分 复杂度O(n)
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < array.length; i++) {
if (array[i] > sum) {
break;
}
// Arrays.binarySearch返回值:
// 若找到元素,则返回该元素下标;否则返回-(插入点)-1
int ans = Arrays.binarySearch(array, i + 1, array.length, sum - array[i]);
if (ans >= 0) {
list.add(array[i]);
list.add(array[ans]);
break;
}
}
return list;
}
}方法2: 首尾指针 复杂度O(n)
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) {
ArrayList<Integer> list = new ArrayList<Integer>();
int l = 0, r = array.length - 1;
while (l < r) {
if (array[l] + array[r] == sum) {
list.add(array[l]);
list.add(array[r]);
break;
} else if (array[l] + array[r] > sum) {
r--;
} else {
l++;
}
}
return list;
}
}
京公网安备 11010502036488号