Одно простое и (время) эффективное решение включает в себя хэш-карту от целых чисел до целых чисел.Этот алгоритм работает путем перебора массива.Для каждого элемента x найдите sum - x в хэш-таблице и, если он существует, выведите (x, sum - x).Добавьте x в хеш-таблицу и перейдите к следующему элементу.
Но для O (1) постоянного пространства и O (n) линейного времени в отсортированном массиве приведенный ниже код наверняка работает.
public static void printPairSums(int[] array, int sum) {
Arrays.sort(array);
int first = 0;
int last = array.length - 1;
while (first < last) {
int s = array[first] + array[last];
if (s == sum) {
System.out.println(array[first] + “ “ + array[last]);
++first;
--last;
} else {
if (s < sum) ++first;
else --last;
}
}
}