查找具有一定总和的数字对

时间:2018-10-03 11:58:19

标签: algorithm

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

我心中唯一的解决方案是: 遍历所有可能的对, 如果遇到更近的距离对,请清洁所得的数组并将其放在那里。 如果遇到一对精确距离,请清除距离较小的一对,然后将其放入结果数组中。

我相信有解决问题的更有效方法,您对此有何想法?

1 个答案:

答案 0 :(得分:0)

所以我们有数组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,在N - a数组中找到与b值(B)相近的最接近二元搜索的结果:|A| * log(|B|)时间复杂度
  3. 跟踪最佳(最小)对ab

总时间复杂度

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

|B| > |A|的情况下,我们可以对A数组进行排序并扫描B并具有(|A| + |B|) * log(|A|)的时间复杂度

如果|A| ~ |B| ~ M的时间复杂度为M * log(M)