我有两个排序的数组A和B,每个都是长度为n。
我还有一组索引S,其中索引在1到n之间。 (例如,如果n = 3,则S可以是(1,2),(2,3)和(1,1))。
我想要一个非常快速的算法(最好是O(log n)),这样它就能从S中找到最大化A [i] + B [j]的对(i,j)。
可以对S进行任何预处理(散列某些值等)。
任何O(n log n)预处理都可以在A和B上完成(因为它总是需要时间对它们进行排序),但是一旦完成预处理,后续查询的各种预处理的S应该很快。
感谢任何想法。
答案 0 :(得分:0)
这不能在小于O(n)的情况下完成。
如果S={(i,n-i+1)|1≤i≤n}
您没有其他解决方案而不是测试S的每个元素,因为对于i≠j
,A[i]+B[n-i+1] < A[j]+B[n-j+1]
和A[i]+B[n-i+1] ≥ A[j]+B[n-j+1]
都是可能的。