寻找两个排序数组的中位数
中位数保持
从一组数字的中位数两边删除同样多的元素(不管被删除的数字的相对顺序是什么样的),中位数保持。— 尽可以把位于中位数左边和右边的这些数字打乱,只要中位数两边被删除的数目相等就能使中位数保持(是剩下的这些数的中位数)。
情景分析
- 假设两个已排序的数组,记为A[m],B[n]。设想一下,当能确定这两个数组中比中位数小的数值的个数x以及比中位数大的数值的个数
y 时,求出min=Min(x,y),那么同时去掉中位数两边(左边的数小于或等于中位数,右边的数大于或等于中位数)任意min个数,中位数保持。为了便于描述,假设数组的起始坐标是1而不是0。还假设C[m+n]是将A和B组合起来排序了的数组。他的中位数下标记为c。记A的中位数的下标为a,B的中位数的下标为b。记A[a]在C中的下标位置为Ca,B[a]在C中的下标位置为Cb。
首先,当A[a]==B[b]时,C的中位数就是A[a],看图。
![]()
位于两边的数的个数一定是相等的。然后,若A[a]≠B[b],我们总有办法交换集合,使得集合A和B满足A[a]<B[b]
case1: m为奇数,n为奇数。
看图:
![]()
∵A[a]<B[b] ,那么一定有:
A[a] 在C中的下标位置 Ca 最大能排在b所在位置 Cb 的前面,所以有 Ca≤a+b−1=m+12+(n+12−1)=m+n2=c ,于是,所有位于a左边的数均小于或等于c-1,均位于C的中位数的左边,他们的个数是 m+12−1=m−12 。
B[b] 在C中的下标位置 Cb 最小能排在a所在位置

本文探讨如何找到两个已排序数组的中位数,并通过不同情况分析(奇数长度或偶数长度)解释如何保持中位数不变。通过对数组元素的比较和调整,确保在移除相同数量的小于或大于中位数的元素后,中位数依然有效。

557

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



