Вычислить все возможные значения для a_w + a_x
, вставить их в хэш-таблицу. Вставьте (a_w + a_x, w) и (a_w + a_x, x) во вторую хеш-таблицу.
Прежде чем вставлять значение в первую хеш-таблицу, проверьте, уже ли она в таблице. Если да, проверьте вторую таблицу. Если есть один из (a_w + a_x, w) или (a_w + a_x, x), не вставляйте ничего (у нас есть дублирующий элемент). Если ни одна из этих пар не во второй таблице, у нас есть положительный ответ.
Если после обработки всех (w, x) пар у нас нет положительного ответа, это означает, что нет такие попарно отличающиеся индексы.
Сложность по времени - O (n2). Требования к пространству также O (n2).
В этом случае можно сделать то же самое в O (n) пространстве, но O (n2 * log (n)) время со слегка модифицированным алгоритмом из этого ответа: Сумма-подмножество с фиксированным размером подмножества :
a_w + a_x
в качестве ключа и w, x
в качестве значений. Предварительно заполните эту очередь элементами n-1
, где x = 0 и w = 1 .. n-1. (sum, w, x)
из этой очереди и поместите элемент (a_w + a_x_plus_1, w, x+1)
в queue (но не ставьте элементы при x> = w). Остановитесь, когда два последовательных элемента, удаленные из очереди, имеют одинаковую сумму.