4-SUM如下:
给定N个不同整数的数组,找到4个整数a,b,c,d,使得a + b + c + d = 0。
我可以提出一个使用二次算法的三次算法来解决3-SUM问题。对于4-SUM,我们可以做得比立方更好吗?
是的你可以。遍历所有数字对并存储它们的总和(并存储哪些数字给出该总和)。在那之后,检查每个和是否在您的和中找到否定。使用散列可以达到二次复杂度,使用std :: map可以达到O(n^2*log(n))。
O(n^2*log(n))
编辑:确保不使用超过一次的数字,这将更好地存储索引而不是每个总和的实际数字。同样,由于给定的总和可能由一对以上构成,因此您将不得不使用哈希多图。考虑到总和的数量是不同的,一次最多使用一次可能会形成X = a1 + a2总和-X,一次使用a1一次a2对于给定的总和,X您将必须迭代最多3对给出-X总和。这仍然是恒定的。
X = a1 + a2
-X
a1
a2
X