資料流中的中位數

Joy_917發表於2020-11-26

題目:

如何得到一個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用Insert()方法讀取資料流,使用GetMedian()方法獲取當前讀取資料的中位數。

思路:

  1. 時間複雜度最小的是用大小堆來儲存中位數左右兩側的最大最小值,然鵝還沒複習到堆,暫時放一下
  2. 這裡使用暴力法:列表儲存輸入,在獲取時排個序先

程式碼:

import java.util.Collections;
import java.util.ArrayList;
public class Solution {
    private ArrayList<Integer> list = new ArrayList();
    public void Insert(Integer num) {
        list.add(num);
    }

    public Double GetMedian() {
        Collections.sort(list);
        if(list.size()==0){
            return null;
        }
        else if(list.size()%2==0){
            return (list.get(list.size()/2-1)+list.get(list.size()/2))/2.0;
        }else{
            return Double.valueOf(list.get(list.size()/2));
        }
    }


}

相關文章