【发布时间】:2020-03-13 07:04:30
【问题描述】:
我有一个任务要求从两个大小相等的集合 M 和 N 中 j 持有不同的数字,只能访问函数 kthsmallestM(int k) 和 kthsmallestN(int k),它们返回分别从 M 和 N 中找到第 k 个最小的整数,算法应该从 M+N 中找到第 j 个最小的元素。
使用蛮力执行此操作的方法相当明显,但该算法应该在 O(log j) 调用 kthsmallestM 或 kthsmallestN 的情况下运行。我不是在寻找一个完整的解决方案,但我已经坚持了一段时间,所以只要一些让我开始的指针将不胜感激!
我尝试过的: 检查 M 的最大元素是否小于 N 的最小元素,反之亦然,在这种情况下,答案将只是 M 或 N 的最大元素,具体取决于具体情况。我尝试使用它来创建一个递归算法,该算法对两组中较小的元素执行相同的检查,但很快就会变成 O(n)。
有什么建议吗?
【问题讨论】:
标签: algorithm set divide-and-conquer