package ch.claude_martin; import java.util.Arrays; import java.util.TreeSet; import java.util.stream.IntStream; public class SomeClass { public static void main(String[] args) { { var a = new int[] { 10, 15, 3, 7 }; var k = 17; checkAndOutput(a, k); } { var a = new int[] { -10, 15, 3, 7, -30 }; var k = -40; checkAndOutput(a, k); } { var a = IntStream.range(-100000, 100000).toArray(); var k = 99999; checkAndOutput(a, k); } { var a = IntStream.range(0, 10000000).toArray(); var k = -1; checkAndOutput(a, k); } } static void checkAndOutput(final int[] a, final int k) { System.out.format("a = %.100s%n", Arrays.toString(a)); System.out.format("k = %d%n", k); System.out.format("result: %s%n", check(a, k)); } static boolean check(final int[] a, final int k) { final var diff = new TreeSet(); for (var i : a) { if (diff.contains(i)) return true; diff.add(k - i); // note: this ignores that overflow can give false results } return false; } }