求中位数的问题

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章