これは私が解決するように求められたインタビューの質問でした。ソートされていない配列が与えられた場合、配列内の2つの数値とそれらの合計を見つけます。(つまり、1つが他の2つの合計になるように配列内の3つの数値を見つけます。)合計(int k)が与えられたときに2つの数値を見つけることについての質問を見たことがあることに注意してください。ただし、この質問では、配列内の数値と合計を見つける必要があります。O(n)、O(log n)、またはO(nlogn)で解くことができますか
各整数を調べて、それに対して二分探索を行うという標準的な解決策があります。より良い解決策はありますか?
public static void findNumsAndSum(int[] l) {
// sort the array
if (l == null || l.length < 2) {
return;
}
BinarySearch bs = new BinarySearch();
for (int i = 0; i < l.length; i++) {
for (int j = 1; j < l.length; j++) {
int sum = l[i] + l[j];
if (l[l.length - 1] < sum) {
continue;
}
if (bs.binarySearch(l, sum, j + 1, l.length)) {
System.out.println("Found the sum: " + l[i] + "+" + l[j]
+ "=" + sum);
}
}
}
}