• 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 }
  • 相关阅读:
    thinkphp传递参数
    $this->display输出模板
    ConterReplaceBehavior.class.php模板内容替换,如__PUBLIC__
    Index/Common目录下文件
    thikphp创建共享数据config.php
    thinkphp连接数据库
    thinkphp笔记
    thinkphp安装 版本 3.1.3
    DIV CSS 网页兼容全搞定 (IE6 IE7 IE8 IE9 火狐 谷歌)
    js倒计时
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/10453673.html
Copyright © 2020-2023  润新知