考虑2个正整数数组。 给我们一些预定义的整数常量 N 。 现在,我们必须找到对,其中1个元素来自1个数组,2个元素来自第二个数组,使得整数之和等于 N 。 如果未找到这样的对,则返回对,它们的和最接近(但不超过) N (如果它们的总和相等,可以是几对)
我心中唯一的解决方案是: 遍历所有可能的对, 如果遇到更近的距离对,请清洁所得的数组并将其放在那里。 如果遇到一对精确距离,请清除距离较小的一对,然后将其放入结果数组中。
我相信有解决问题的更有效方法,您对此有何想法?
答案 0 :(得分:0)
所以我们有数组A
和B
,我们想找出
a + b <= N where a belongs to A and b belongs to B
如此
(N - a - b) is minimum
我们可以执行以下操作
B
数组:|B| * log('B')
时间复杂度a
中的每个A
,在N - a
数组中找到与b
值(B
)相近的最接近二元搜索的结果:|A| * log(|B|)
时间复杂度a
和b
对总时间复杂度
|B| * log('B') + |A| * log(|B|) = (|A| + |B|) * log(|B|)
在|B| > |A|
的情况下,我们可以对A
数组进行排序并扫描B
并具有(|A| + |B|) * log(|A|)
的时间复杂度
如果|A| ~ |B| ~ M
的时间复杂度为M * log(M)