【发布时间】:2016-03-20 14:34:53
【问题描述】:
所以,你有n个排序数组(不一定等长),你要返回组合数组中的第k个最小元素(即合并所有n个排序数组形成的组合数组)
我一直在尝试它和它的其他变体已经有一段时间了,直到现在我才觉得有两个长度相等的数组,都是排序的,一个必须返回这两个数组的中位数。 这具有对数时间复杂度。
在此之后,我尝试将其概括为在两个排序数组中找到第 k 个最小的。 Here 是关于 SO 的问题。 即使在这里,给出的解决方案对我来说也不是很明显。但即使我设法说服自己接受这个解决方案,我仍然对如何解决绝对一般情况感到好奇(这是我的问题)
有人可以向我解释一步一步的解决方案吗(我认为这又应该花费对数时间,即 O( log(n1) + log(n2) ... + log(nN) 其中 n1, n2...nN 是n 个数组的长度)从更具体的情况开始,然后转到更一般的情况?
我知道互联网上到处都有针对更具体案例的类似问题,但我还没有找到令人信服和明确的答案。
Here 是一个关于 SO 的问题(及其答案)的链接,它处理 5 个排序数组并找到组合数组的中位数。答案太复杂了,我无法一概而论。
欢迎使用更具体的案例(正如我在帖子中提到的)的干净方法。
PS:您认为这可以进一步推广到未排序数组的情况吗?
PPS:这不是作业问题,我只是在准备面试。
【问题讨论】:
-
我认为这个问题更适合 StackProgramming。无论如何我无法回答你的问题:)
-
对数时间是什么意思?我们有两个参数,n 和 k。我认为你不能比 O(n) 更快,因为你必须至少查看每个数组一次。
-
对数意味着类似于 O( lg(n1) + lg(n2) + lg(n3)...) 其中 n1, n2, n3.. 是数组 n1, n2, n3 的长度...n
标签: arrays algorithm data-structures merge