开发者社区> 问答> 正文

如何找到两个排序数组的并集中的第k个最小元素?

这是一个作业问题。他们说这需要O(logN + logM)在哪里N,M是数组的长度。

让我们将数组命名为a和b。显然,我们可以忽略所有a[i]和b[i]其中i>ķ。 首先,我们比较a[k/2]和b[k/2]。让b[k/2]> a[k/2]。因此,我们也可以丢弃所有b[i],其中i> k / 2。

现在我们有了all a[i],其中i <k和all b[i],其中i <k / 2来找到答案。

你下一步怎么做? 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-08 11:20:33 495 0
1 条回答
写回答
取消 提交回答
  • 您已掌握,继续前进!并注意索引...

    为了简化一点,我将假设N和M> k,因此这里的复杂度为O(log k),即O(log N + log M)。

    伪代码:

    i = k/2 j = k - i step = k/4 while step > 0 if a[i-1] > b[j-1] i -= step j += step else i += step j -= step step /= 2

    if a[i-1] > b[j-1] return a[i-1] else return b[j-1] 为了演示,您可以使用循环不变i + j = k,但我不会做所有作业:)

    2020-02-08 11:20:44
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载