public void func() {
boolean[] check = new boolean[49];
for(int i=1; i <=4; i++ ) {
for(int j=1; j <=4; j++) {
for(int k=1; k<=4; k++) {
int sum = i*i + j*j + k*k;
if(!check[sum]) {
check[sum] = true;
System.out.println(i + "," + j + "," + k);
}
}
}
}
}
Идея такова: мы берем тройку, вычисляем сумму квадратов и проверяем, была ли у нас уже тройка с этой суммой. одинаковые тройки будут иметь одинаковую сумму квадратов. сумма квадратов всегда будет в диапазоне 3-48. кроме того, сумма уникальна для каждой комбинации чисел, как вам и требуется.
Сложность равна O (N ^ 3), где N - размер массива. поскольку нам нужны комбинации из 3 элементов, я не думаю, что вы можете go ниже этого.
UPDATE: , чтобы сделать более общим, используйте HashSet для сумм вместо логический массив и выполнить 3 вложенных цикла по входному массиву. вычислите сумму квадратов и сравните с HashSet.
Оптимизация производительности: заранее вычислите квадраты каждого элемента в массиве, чтобы вам не приходилось вычислять их снова и снова.