Вот фрагмент рабочего кода с вашим примером, используя HashSet
:
import java.util.*;
public class Main{
public static void main(String[] args) {
int[] arr = new int[]{17, 1, 20, 4, 12, 9};
HashSet<Integer> hash = new HashSet<Integer>();
int sum = 21;
for(int i = 0; i < arr.length; i++){
hash.add(arr[i]);
}
for(int i = 0; i < arr.length; i++){
if(hash.contains(sum - arr[i])){
System.out.println(arr[i] + " and " + (sum - arr[i]));
hash.remove(arr[i]);
}
}
}
}
Сложность O (n) . Идея состоит в том, чтобы добавить все числа массива в HashSet. Затем выполните итерацию по массиву и проверьте, есть ли для каждого элемента arr[i]
, sum - arr[i]
в HashSet. Если это так, это означает, что у вас есть совпадающая пара, поэтому вы удалите один из элементов пары, чтобы избежать повторения совпадений.