给出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个元素。
希望能够清楚地理解问题
答案 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]);
}
}