如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
维护一个大根堆和一个小根堆,大根堆中的所有数都小于小根堆的所有数,大根堆和小根堆各占所有数的一半
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()) ; } }}
新闻热点
疑难解答