求中位數的問題

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

 

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