找到四个整数相加得出给定值

时间:2019-05-03 07:31:01

标签: algorithm hash

给出一组属于ℤ的 n 个整数- S S 中的所有整数都在0到⌈ nlgn ⌉的范围内。
我需要找出 S 中是否有4个整数,它们的和等于给定的数字 X

我知道有一种使用散列的 O(n 2 解决方案,还有其他一些 O(n 2 < / sup> lgn)

是否有可能在n 2 时间内不使用哈希就可以解决此特定问题?

如果使用散列, O(n 2 是最坏的情况,还是它的预期?

1 个答案:

答案 0 :(得分:0)

伪代码:

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),因为我们从未多次对sums [idx]中的候选进行查看,并且这些候选中有n ^ 2个。这部分可能可以改进,但对整体复杂性没有帮助。