求中位数的问题

1.  两个有序数组,求其中位数

 

中位数概念, 对于有序数组,

如果长度为奇数, 那么中位数为中间那个数

如果长度为偶数,中位数为中间两个数的平均数

 

对于有序数组 A1, A2, ....       A(m),  .... A(N), 如果其中位数为 A(m)

从 A1 ~ A(m-1)      中去掉 k 个数

从 A(m+1) ~ A(N)  中去掉 k 个数, 则新形成的数组中位数还是 A(m). 

关键是去掉的时候从中位数两边去掉相同数目的数, 不能去掉中位数

 

几种特殊的 case 处理:

1.   [a, b]   [c, d]  直接处理

      m1 = (a < c) ? c : a;

      m2 = (b < d) ? b : d;

 

2.   [a],  [bs, b(s+1),            b(t),              b(e) ]

    如果 len(b) 为奇数,  b(t) =  b[(s+e)/2]

    if   a > b(t)    中位数为 b(t) , min[a ,  b(t+1)]

    if   a <  b(t)  中位数为 b(t) , max[a,  b(t-1)]

3.  [b, c]   [....  al, a, ar .....]  第二个数组长度为奇数,a 为中间那个数字

   a < b 时候, 中位数 min(b, ar)

   a > c 时候,  中位数 max(c, al)

   b< a < c,   中位数为 a

4  [b, c]  [ ... all, al, ar, arr ...]  第二个数组的长度为偶数, 中位数有两个

  al < b,     (b, c, ar, arr) 中最小的两个

  ar > c,    (b, c, all, al) 中最大的两个

  al > b  &&  ar < c  ,  中位数为 al, ar

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值