zoukankan      html  css  js  c++  java
  • 64 数据流中的中位数

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

    java:

     1 import java.util.PriorityQueue;
     2 import java.util.Comparator;
     3 public class Solution {
     4     /* 大顶堆,存储左半边元素 */
     5     private PriorityQueue<Integer> left = new PriorityQueue<Integer>((o1,o2)->o2-o1) ;
     6     /* 小顶堆,存储右半边元素,并且右半边元素都大于左半边 */
     7     private PriorityQueue<Integer> right = new PriorityQueue<Integer>() ;
     8     /* 当前数据流读入的元素个数 */
     9     private int N = 0 ;
    10 
    11     public void Insert(Integer num) {
    12        if (N%2 == 0){
    13             /* N 为偶数的情况下插入到右半边。
    14          * 因为右半边元素都要大于左半边,但是新插入的元素不一定比左半边元素来的大,
    15          * 因此需要先将元素插入左半边,然后利用左半边为大顶堆的特点,取出堆顶元素即为最大元素,此时插入右半边 */
    16            left.add(num) ;
    17            right.add(left.poll()) ;
    18        }else{
    19            right.add(num) ;
    20            left.add(right.poll()) ;
    21        }
    22         N++ ;
    23     }
    24 
    25     public Double GetMedian() {
    26         if (N%2==0){
    27             return (left.peek() + right.peek()) / 2.0 ;
    28         }else{
    29             return (double)right.peek() ;
    30         }
    31     }
    32 
    33 
    34 }
  • 相关阅读:
    create_project.py报错问题,建议用回python2.7
    windows下执行build_native.sh报权限问题
    编辑器CocoStudio和CocosBuilder的对比
    双击判断
    Web文件的ContentType类型大全
    Java四类八种数据类型
    自己写的通过ADO操作mysql数据库
    使用Cout输出String和CString对象
    CString和string头文件
    C++连接mysql数据库的两种方法
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/10453673.html
Copyright © 2011-2022 走看看