【问题标题】:determine whether there are 2 elements in unsorted array that sum up to Z in O(n) average time [duplicate]确定未排序数组中是否有 2 个元素在 O(n) 平均时间内总和为 Z [重复]
【发布时间】:2012-03-12 08:49:02
【问题描述】:

可能重复:
Determine whether or not there exist two elements in Set S whose sum is exactly x - correct solution?

考虑一个未排序的数字数组和一个常数 Z。我们想找出数组中是否有两个元素的和为 Z。

我知道there is an O(n*lgn) algorithm to do so。但是有没有在 O(n) 平均情况下运行的算法?

【问题讨论】:

  • 这个问题已经回答过无数次了。在发布之前进行一些搜索(或只是搜索)。见:stackoverflow.com/questions/2171969/…
  • 这看起来像作业,昨天问了同样的问题stackoverflow.com/questions/9373450/…
  • @ElKamina 这个问题是关于 O(nlog(n)) 算法的,所有提出的解决方案平均在 Θ(nlog(n)) 中运行.您提出的重复内容以及我在粗略搜索中找到的其他问题都没有讨论 O(n) 算法的可能性。
  • @Gilles 实际上提供了几种 0(n) 解决方案。包括stackoverflow.com/a/2172045/14167
  • @DavidNehme 我没有看到。您引用的不是O(n)。它执行 Θ(n) 哈希表查找,并且哈希表查找最多为 O(lg(n))。答案下方的 cmets 对此进行了充分解释。

标签: arrays algorithm


【解决方案1】:

好吧,经过一番思考,我想出了以下方案:

  1. 制作大小为 2n 的哈希表
  2. 对于 S 中的每个值 s,将 s 和 Z-s 散列到散列表中
  3. 如果发生碰撞,则存在 2 个元素之和等于 Z

这个方案的运行时间为 O(n)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 2013-02-03
    • 2023-03-09
    • 2021-03-31
    • 2014-03-10
    • 1970-01-01
    相关资源
    最近更新 更多