Я знаю, что этот тип вопроса был опубликован раньше, но я хочу обсудить что-то новое. Так что я отправляю его.
Учитывая несортированный массив целых чисел, найдите все триплеты, которые удовлетворяют x ^ 2 + y ^ 2 = z ^ 2.
Например, если заданный массив равен - 1, 3, 7, 5, 4, 12, 13 Ответ должен быть - 5, 12, 13 и 3, 4, 5
Я предложил ниже алгоритм со сложностью O (n ^ 2) -
- Сортировка массива в порядке убывания. - O (nlogn)
- квадратный каждый элемент. - O (n)
Теперь он сводится к задаче нахождения всех триплетов (a, b, c) в отсортированном массиве так, что a = b + c.
Интервьюер настаивал на решении лучше, чем O (n ^ 2).
Я прочитал проблему 3SUM в Википедии, которая подчеркивает, что проблема может быть решена в O (n + ulogu), если числа находятся в диапазоне [-u, u], предполагая массив может быть представлен как бит-вектор. Но я не могу получить четкую картину дальнейших объяснений.
Может кто-то, пожалуйста, помогите мне понять, что происходит с хорошим примером?