【问题标题】:How to write an objective C code to check if the sum of any three numbers in an array/list matches a given number? [duplicate]如何编写客观的 C 代码来检查数组/列表中任意三个数字的总和是否与给定数字匹配? [复制]
【发布时间】:2013-01-01 20:35:48
【问题描述】:

可能重复:
Finding three elements in an array whose sum is closest to an given number

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

【问题讨论】:

  • 你试过什么?您是否认为暴力枚举三个元素的组合是一个坏主意?
  • 我看到你已经编辑了你的帖子,明确表示你想要一个 Objective-C 解决方案。尽管如此,您可能想阅读songlj 提供的答案,因为他提供了文字算法。您需要做的就是编码。这几乎是最好的学习方式。自己做! Henrik 上面的链接也很棒!
  • 哦..对不起我做到了...没有时间接受答案。

标签: objective-c


【解决方案1】:

第 1 步:排序,O(nlgn)

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

总复杂度:O(n^2)

【讨论】:

  • 您确定复杂性.?因为迭代两个数字本身需要 O(n^2) 时间,然后搜索给定数字的元素 - 迭代数字的总和需要 O(log(n)) 所以它应该是 O(n^2(log(n)))
  • @Imposter 当然。请考虑或搜索这个问题:检查任意两个数之和是否等于给定数
  • 是的,我同意“检查任何两个数字的总和是否等于给定数字”需要 O(nlog(n)) 时间,但现在搜索第三个元素需要一些时间,对吗?额外承担的时间是多少?在你提到的问题中,给定的数字(比如 P)是恒定的,但这里 P-A 对于我们选择的每一对数字都是不同的。我在某个地方出错了吗?帮帮我
【解决方案2】:

这是另一种方式

X,Y,Z 是数组的索引,P 是 Number 。

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

所以搜索需要 log(n) 时间(二分搜索),所以对于 n 个元素需要 O(nlog(n)) 时间。

现在我们的条件是 X+Y+Z=P 我们将其推导出为 X+Y=P-Z

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))) .

【讨论】:

    【解决方案3】:

    这是 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 2022-06-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多