0

可能重复:
在数组中查找三个元素的总和最接近给定数字

如何编写 Objective C 代码来检查数组/列表中任意三个数字的总和是否与给定数字匹配?

4

3 回答 3

3

第 1 步:排序,O(nlgn)

第2步:迭代每个数字,比如A,(这花费O(n)),然后检查任何两个数字的总和是否等于给定数字减去A(这是一个花费O(n)的经典问题)

总复杂度:O(n^2)

于 2013-01-18T06:54:32.807 回答
1

这是另一种方式

X,Y,Z 是数组的索引,并且 P 被赋予 Number 。

如果条件是 X+Y=P,那么我们对数组进行排序,然后我们选择每个元素,然后在剩余的数组中搜索 PY。如果搜索成功,那么很好,否则返回 False。

所以搜索需要 log(n) time(binary search) 所以对于 n 个元素它需要 O(nlog(n)) time 。

现在我们的条件是 X+Y+Z=P 我们推导出来 X+Y=PZ

Now Pick a number Z and calculate P-Z and let it be R . 
Now the problem is deduce to X+Y=R .So time complexity is O(nlog(n))
Since R varies n times for n picks in array so complexity is O((N^2)log(n))) .
于 2013-01-18T10:30:49.193 回答
0

这是 Python 中的一个蛮力解决方案,其价值仅在于其简洁性,而不在于其效率:

import itertools
def anyThreeEqualTo(list, value):
    return any([sum(c) == value for c in itertools.combinations(list, 3)])

另一个想法:

import itertools
def anyThreeEqualTo(list, value):
    for c in itertools.combinations(list, 3)])
        if sum(c) == value:
            return True
    return False

这些解决方案依次尝试每个三元组,直到找到具有所需总和的一个。

于 2013-01-18T07:41:16.713 回答