从两组返回第j个最小元素的算法

我有一个作业要求从相等大小的 j 的两个集合M和N中保存不同的数字,只能访问函数kthsmallestM(int k)和kthsmallestN(int k),这些函数返回分别从M和N开始的第k个最小整数,算法应从M + N找到第 j 个最小元素。

使用蛮力执行此操作的方法非常明显,但是该算法应在对kthsmallestM或kthsmallestN进行O(log j )调用的情况下运行。我不是在寻找完整的解决方案,但是我已经坚持了一段时间,所以只需要一些帮助我入门的指示即可!

我尝试过的事情: 检查M的最大元素是否小于N的最小元素,反之亦然,根据情况,答案将仅仅是M或N的最大元素。我尝试使用它来创建一个递归算法,该算法对两个集合的较小元素执行相同的检查,但是很快就变成了O(n)。

有什么提示吗?

wang19898312as 回答:从两组返回第j个最小元素的算法

k 最小元素将包括一些 x 最小的 x kx 的最小元素来自 N

如果我们猜测 x ,则可以使用 kthsmallestM(x) kthsmallestN(kx) kthsmallestM (x + 1) kthsmallextN(k + 1-x),看看我们的猜测是太低,太高还是恰到好处。

这意味着我们可以进行二进制搜索以找到从0到 j 的正确的 x 值。

本文链接:https://www.f2er.com/3084570.html

大家都在问