【发布时间】:2014-12-13 16:39:38
【问题描述】:
给定两个大小分别为 N1 和 N2 的排序数组 a[] 和 b[],设计一个算法来找到第 k 个最大的键。你的算法最坏情况运行时间的增长顺序应该是 lg(N1+N2)。
这个问题的提示说有两种可能的解决方案:
方法 A:计算 a[]  中的中位数和 b[] 中的中位数。 在大约一半大小的子问题中重复出现。
我已经实现了这个解决方案(其本质包括将 a[] 和 b[] 调整大小/截断到长度 k,找到每个中的中值,比较它们,并选择数组的适当一半 - 处理极端情况视情况而定。)
给出的另一种方法是:
设计一个常数时间算法来判断 a[i]  是否是第 k 个 最大的关键。使用这个子程序和二分查找。
我很难找出如何采用这种方法。我知道只给一个数组,只需查看该元素的索引,就可以在 O(1) 时间内找到给定元素是否是第 k 大键。但是,我不确定当两个数组如何确定一个元素是否是这两个数组联合中的第 k 个元素。
【问题讨论】:
标签: arrays algorithm sorting search