给定两个 int 数组,都是已按照升序排好序的,并且大小相同,都是 N.在 O(log2 N)时间找出它们的中位数.搞得略头疼.但总算还是写出了代码.思想上就是,二分查找.虽然我起初用的是顺序查找.看来我的头脑还停留在线性比较上.
新的数组,假想的这个两个数组合并了的数组.其个数为偶数个,取下中位数.根据已知条件,大小相等,且都已按照升序排序.那么,如果当前查看的数是要找的中位数,则它应该满足,大于所有 2N 个数中的 N - 1 个, 并且小于其余的 N 个.这样的话,在它本身数组中,已经有了一部分,另外的一部分,应在另一个数组中.如果当前查看的树的索引为 middle, 当前查看的数组为A,另一个为B.那么,A[middle] >= A[x] {x | 0 < x < middle}.A[middle] >= B[x] {x | 0 < x < middle - 1}.这就是前面所说的大于所有 2N 个数种的 N - 1个;接下来,A[middle] <= A[x] {x | middle < x < N}.A[millde] < B[x] {x | <= middle < N}.也即小于其余的 N 个.只有在这两个条件都得到满足的情况下,A[middle]是要找的中位数.这就是我所能给出的全部分析了,接下来的部分,我的话其实很无力.因为个中道理,我都没有搞懂.所以也就不胡言乱语了.不过好像,已经胡言乱语好一阵了...
呵呵,贴代码了.
找出两个已排序且同序大小相等的数组的中位数C语言
最新推荐文章于 2024-10-22 00:15:00 发布
本文介绍了一个算法问题:如何在O(log2N)时间内找到两个已排序的相同大小数组的中位数。通过二分查找的方法,文章详细阐述了判断当前元素是否为中位数的条件,并提供了具体的C语言实现。
528

被折叠的 条评论
为什么被折叠?



