从两个阵列中选择一对

时间:2013-12-09 02:53:46

标签: algorithm

给出2个长度分别为n和m的阵列A和B.

我想找到一对(A [i],B [j]),使得和A [i] + B [j]最大,但是在给定整数k和j-i> k的条件下1< = i< = n,1< = j< = m。

我知道一个简单的O(n * m)天真的方法来解决它。但是他们有更好的方法来做到这一点。

让我举一个例子说我们有两个数组A = [5,10,9,7,10]和B = [0,0,0,4,1,2,-2]并说K = 3然后我必须选择A中的一个元素和B中的其他元素,使得所选元素的位置之间的差异至少是k。在这种情况下,我们可以看到ans是12.通过选择A中的第二个元素和来自B的第6个元素。

希望能够清楚地理解问题

1 个答案:

答案 0 :(得分:1)

这是在O(N+M)中执行此操作的方法: -

生成一个max数组,其中max [i]表示子数组中的最大元素b [i to m]

max[m] = b[m]        
 for(i=m-1;i>=1;i--) 
    max[i] = maximum(max[i+1],b[i]);

计算所有有效对的maxpair,如下所示: -

maxpair = -infinity;


for(i=1;i<=n;i++) {

  if(i+k+1<=m) {

     maxpair = maximum(maxpair,a[i]+max[i+k+1]);

  }

}