【问题标题】:Find pairs of numbers with certain sum找到具有特定总和的数字对
【发布时间】:2018-10-03 11:58:18
【问题描述】:

考虑 2 个正整数数组。 我们得到了一些预定义的整数常量N。 现在,我们必须找到对,其中 1 个元素来自 1 个数组,2 个元素来自第二个数组,使得整数之和等于 N。 如果没有找到这样的对,则返回与 N 最接近(但不超过)的对(如果它们的和相等,则可以是几对)

我想到了唯一的解决方案: 遍历所有可能的对, 如果我们遇到一对更近的距离,清理生成的数组并将其放在那里。 如果我们遇到精确距离的对,清除距离较小的对并将其放入结果数组中。

我相信有更有效的方法来解决问题,您对此有什么想法吗?

【问题讨论】:

  • 对数组进行排序,通过类似二分法的搜索仅遍历少数元素。

标签: algorithm


【解决方案1】:

所以我们有数组AB,我们想找出答案

  a + b <= N   where a belongs to A and b belongs to B 

这样

  (N - a - b) is minimum

我们可以这样做

  1. 排序B数组:|B| * log('B')时间复杂度
  2. 对于A 中的每个a,在二分搜索的帮助下,在B 数组中找到最接近N - a 的值(b)(b) :|A| * log(|B|)时间复杂度
  3. 跟踪最佳(最少)ab

总时间复杂度

|B| * log('B') + |A| * log(|B|) = (|A| + |B|) * log(|B|) 

如果|B| &gt; |A| 我们可以对A 数组进行排序并扫描B 并具有(|A| + |B|) * log(|A|) 时间复杂度

如果|A| ~ |B| ~ M 我们有M * log(M) 时间复杂度

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多