zoukankan      html  css  js  c++  java
  • 树8:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。

    方法1:使用动态数组做。

    !回顾 arrayList 、Linklist array区别:

    Array:静态数组

    arrayList:基于动态数组,参见https://www.cnblogs.com/battlecry/p/9374497.html

    Linklist:基于动态链表,参见https://blog.csdn.net/qedgbmwyz/article/details/80108618

    arrayList相比Linklist更适合查询和读取,因为LinkedList要移动指针。Linklist相比arrayList更适合增删操作,因为arrayList要移动大量数据。

    思路:此题是读取数据流并进行查询操作,用ArrayList更合适。

    !ArrayList常见的方法

    array.add(object);//添加一个元素
    array.get(index);//取出集合中的元素,在get方法的参数中,写入索引。
    array.size();//返回集合的长度,也就是存储元素的个数。
    array.remove();//移除一个元素
     

    代码:

    import java.util.*;
    public class Solution {
        List<Double>list=new ArrayList<Double>();
        public void Insert(Integer num) {
            list.add(Double.valueOf(num));//返回给定参数num的原生Double对象值
            Collections.sort(list);//ArrayList的排序
        }
    
        public Double GetMedian() {
            double res=0;
            int len=list.size();
            if(len==1)res=list.get(0);
            else if(len%2==0){
                int tmp=len/2;
                res=(list.get(tmp)+list.get(tmp-1))/2.0;
            }else{
                int tmp=len/2;
                res=list.get(tmp);
            }
            return res;
        }
    }

     

    方法2:大顶堆小顶堆

  • 相关阅读:
    MyCat 数据库读写分离
    python 网络编程-05 socketserver
    python 网络编程-04 文件的传输
    python 网络编程-03 粘包问题及处理
    常用模块-01getopt
    js获取自动获取本电脑IP
    js变态需求
    js正则不能输入中文和英文
    禁止输入中文
    手机号3-4-5
  • 原文地址:https://www.cnblogs.com/xuechengmeigui/p/12664144.html
Copyright © 2011-2022 走看看