если проблема одна "Для массива целых чисел найдите все тройки, такие что a ^ 2 + b ^ 2 = c ^ 2
Сортировка массива в порядке возрастания
Установить три указателя p1, p2, p3 в записях 0,1,2
установить pEnd для последней записи в массиве
while (p2
sum = (*p1 * *p1 + *p2 * *p2)
while ((*p3 * *p3) < sum && p3 < pEnd -1)
p3++;
if ( *p3 == sum)
output_triple(*p1, *p2, *p3);
p1++;
p2++;
}
он перемещает 3 указателя вверх по массиву, так что это O (sort (n) + n)
это не n2, потому что следующий проход начинается со следующего наибольшего числа и не сбрасывается.
если последнее число было слишком маленьким для тройки, оно все еще мало, когда вы переходите к следующему большему a и b