牛客(63)数据流中的中位数

//    题目描述
//    如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,
//    那么中位数就是所有数值排序之后位于中间的数值。
//    如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。



    LinkedList<Integer> linkedList = new LinkedList<Integer>();
    public void Insert(Integer num) {
        if (linkedList.size()==0||num<linkedList.getFirst()){
            linkedList.addFirst(num);
        }else{
            boolean isMax = true;
            for (Integer integer: linkedList) {
                if (num<integer){
                    int index = linkedList.indexOf(integer);
                    linkedList.add(index,num);
                    isMax = false;
                    break;
                }
            }
            if (isMax) {
                linkedList.addLast(num);
            }
        }
    }

    public Double GetMedian() {
        if (linkedList.size()==0){
            return null;
        }

        if (linkedList.size()%2==1){
            int index = linkedList.size()/2;
            return Double.valueOf(linkedList.get(index));
        }else{
            int index = linkedList.size()/2;
            Double result = (linkedList.get(index)+linkedList.get(index-1))/2.0;
            return result;
        }
    }

 

posted @ 2018-06-04 11:51  楷兵  阅读(146)  评论(0编辑  收藏  举报