给出一组属于ℤ的 n 个整数- S 。
S 中的所有整数都在0到⌈ nlgn ⌉的范围内。
我需要找出 S 中是否有4个整数,它们的和等于给定的数字 X 。
我知道有一种使用散列的 O(n 2 )解决方案,还有其他一些 O(n 2 < / sup> lgn)。
是否有可能在n 2 时间内不使用哈希就可以解决此特定问题?
如果使用散列, O(n 2 )是最坏的情况,还是它的预期?
答案 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个。这部分可能可以改进,但对整体复杂性没有帮助。