algorithm - 从两个数组中选择一对

标签 algorithm

给定2个长度分别为n和m的数组A和B。

我想找到一对 (A[i],B[j]) 使得总和 A[i]+B[j] 最大,但条件是 j-i>k 对于给定的整数 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 中选择第六个元素。

希望能把问题说清楚

最佳答案

这是在 O(N+M) 中完成的方法:-

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

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

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

maxpair = -infinity;


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

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

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

  }

}

关于algorithm - 从两个数组中选择一对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20462318/

相关文章:

c# - 用颜色填充点之间空间的算法

python - python 数学游戏中不允许否定答案的奇怪问题

c++ - 优化浮点除法和转换操​​作

c# - 从大小为 n 的 r 个元素生成幂多重集

c++ - c++中的 vector 下标超出范围错误

algorithm - 计算鼠标与文本输入算法的 Big O 时间复杂度

javascript - 比较两个 URL 模板的优化算法

java - 在 Java 中按 "OR"逻辑对谓词进行分区

java - Boyer-Moore 多数表决算法的内存复杂度?

c++ - 如何更有效地从 vector 或集合中删除元素?