这是典型的4sum问题
给定n个整数的数组S,S中是否有元素a,b,c和d,使得a + b + c + d =目标?找到数组中所有唯一的四元组,它们给出了目标的总和。
我知道的一个解决方案将花费O(n ^ 3)时间。但是当我分析最小时间复杂度时,我对语句感到困惑:"因为4个数字会有O(n ^ 4)种组合,在最坏的情况下,它们可能总结为目标数字,因此我们必须至少访问每个组合一次。结果,最小的时间复杂度是O(n ^ 4)。"
我知道声明显然是错误的(毕竟存在O(n ^ 3)算法),但不知道为什么。
我知道这可能是一个愚蠢的问题......但我真的对此感到困惑。有人可以帮忙吗?提前谢谢。
答案 0 :(得分:1)
这是因为问题要求4个数字的所有唯一组合给出指定的总和。我们来看看细节。如果引用的句子
由于4个数字将有O(n ^ 4)种组合,因此 在最坏的情况下,他们可能总结到目标数量,因此我们 必须至少访问每个组合一次。结果是, 最小时间复杂度为O(n ^ 4)。
是真的,这意味着类似的2-Sum问题具有最小的时间复杂度O(n^2)
,对吧?但是,我们都知道它没有。这是因为我们不必检查所有对以查找所有唯一对。假设相反,即所有对总和达到指定的总和,并且都是唯一的,所以我们需要检查它们。这意味着我们可以从数组中找到四个不同的整数a, b, c, d
,a + b = s
和c + d = s
,以及a + c = s
和b + d = s
。这意味着2a + b + c = 2d + b + c
或a = d
,这会产生b = c
。因此,(a,b) = (c,d)
,所以所有对都是唯一的假设是错误的,这是一个矛盾。因此,如果我们处理了(a,b)
对,我们可以跳过(c,d)
,因为它是同一对。这就是具有O(n^3)
复杂度的算法在4-Sum问题的情况下,它们通过在开始时对输入数组的元素进行排序或散列来利用这一事实。可以找到一些聪明的解决方案here。