首页 > 学院 > 开发设计 > 正文

数据流的中位数

2019-11-08 00:59:30
字体:
来源:转载
供稿:网友

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

维护一个大根堆和一个小根堆,大根堆中的所有数都小于小根堆的所有数,大根堆和小根堆各占所有数的一半

import java.util.Comparator;import java.util.PRiorityQueue;import java.util.Queue;public class Solution {    private Queue<Integer> up =  new PriorityQueue<>(11 , new Comparator<Integer>(){        public int compare(Integer o1 , Integer o2){            return o1 - o2 ;        }    });    private Queue<Integer> down = new PriorityQueue<>(11 , new Comparator<Integer>(){        public int compare(Integer o1 , Integer o2){            return o2  - o1 ;        }    }) ;    public void Insert(Integer num) {        if(down.size() > up.size()){            if(down.peek() > num){                up.add(down.poll()) ;                 down.add(num) ;             }else {                up.add(num);            }        }else{            if(up.size() > 0 && up.peek() < num){                down.add(up.poll()) ;                up.add(num) ;             }else {                down.add(num);            }        }    }    public Double GetMedian() {        if(up.size() == down.size()){            return (up.peek() + down.peek())*1.0/2.0 ;        }else{            return (double)(down.peek()) ;        }    }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表