给定一组n个整数-s,它们属于_。
S中的所有整数都在0到⌈nlgn⌉之间。
我需要找出s中是否有4个整数的和等于给定的x。
我知道有一个使用散列的o(n2)解,还有一些其他的o(n2lgn)解。
有没有可能在n2时间内不使用散列就可以解决这个特定的问题?
如果使用散列,O(n2)是最坏的情况,还是它的预期?

最佳答案

伪码:

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个。这一部分可能会得到改善,但对整体的复杂性没有帮助。

09-06 22:24