псевдокод:
sums = array of vectors of size (n log n) * 2
for index1, num1 in numbers:
for index2, num2 in numbers:
sums[num1 + num2].append((index1, index2))
idx1 = 0
idx2 = x
while idx1 < idx2:
if any pair in sums[idx1] doesnt share an index with any pair of sums[idx2]:
any of those combinations generates the sum x
idx1 += 1
idx2 -= 1
Поскольку числа находятся в небольшом диапазоне, нам не нужно хэшировать, мы можем использовать простые массивы с суммой в качестве индекса. Чтобы сгенерировать суммы, мы тратим O (n ^ 2) времени. Затем, чтобы проверить, есть ли сумма, это также O (n ^ 2), потому что мы никогда не смотрим на кандидатов в суммах [idx] более одного раза каждый, и есть n ^ 2 из этих кандидатов. Эта часть, вероятно, может быть улучшена, но не поможет общей сложности.