假设您有一个数字矩阵,这些数字按行和列排序。
你如何找到中位数。
我在网上搜索并找到了很多答案,如:
有一种算法可以在O(logn)中找到两个排序数组的中位数 - 应用n次。 我认为这没有任何意义。
或者我得到一些研究论文。这个问题似乎并不像爵士那样。
有人能给我一个精确的算法吗?
答案 0 :(得分:0)
鉴于它是行方式和列方式排序矩阵(m x n),我们可以使用优先级队列找到O(m * n * log(m))的中位数。
伪代码是,
PriorityQueue<Pair<int, int>> pq(m);
//Pair<int, int> is the coordinate of the matrix element
for i <- 0 to m
pq.add(Pair(i, 0))
count <- 0
k = (m*n)/2
Pair<int, int> xy
while count < k:
count++
xy <- pq.poll()
x <- xy.first
y <- xy.second
if y+1 < n:
pq.add(Pair(x, y+1))
return matrix[xy.first][xy.second]
答案 1 :(得分:-2)
使用循环将2d数组复制到1d数组,然后对其进行排序,然后在2d数组中找到中位数...它只找到行或列的中位数而不是我认为...这是我认为它可能是错误的或者对...... !!