数据流的中位数

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

思路:排序找中间

LinkedList<Integer> list=new LinkedList<Integer>();
    public void Insert(Integer num) {
        if(list.size()==0||num<list.getFirst()){
            list.addFirst(num);
        }else{
            boolean falg=false;
            for(Integer e:list){
                if(num<e){
                    int index=list.indexOf(e);
                    list.add(index,num);
                    falg=true;
                    break;
                }
            }
            if(!falg)
                list.addLast(num);
        }
    }

    public Double GetMedian() {
        if(list.size()==0)
            return null;
        if(list.size()%2==0){
            int i=list.size()/2;
           Double a = Double.valueOf(list.get(i - 1) + list.get(i));
            return a/2;
        }
        list.get(0);
         Double b=Double.valueOf(list.get((list.size() + 1) / 2 - 1));
        return Double.valueOf(list.get((list.size() + 1) / 2 - 1));
    }
时间: 2024-10-06 07:29:10

数据流的中位数的相关文章

Leetcode 295.数据流的中位数

数据流的中位数 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数据结构中. double findMedian() - 返回目前所有元素的中位数. 示例: addNum(1) addNum(2) findMedian() -> 1.5 addNum(3) fi

[LeetCode] Find Median from Data Stream 找出数据流的中位数

Median is the middle value in an ordered integer list. If the size of the list is even, there is no middle value. So the median is the mean of the two middle value. Examples: [2,3,4] , the median is 3 [2,3], the median is (2 + 3) / 2 = 2.5 Design a d

295 Find Median from Data Stream 数据流的中位数

中位数是排序后列表的中间值.如果列表的大小是偶数,则没有中间值,此时中位数是中间两个数的平均值.示例:[2,3,4] , 中位数是 3[2,3], 中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:    void addNum(int num) - 从数据流中增加一个整数到数据结构中.    double findMedian() - 返回目前所有元素的中位数.例如:addNum(1)addNum(2)findMedian() -> 1.5addNum(3) fi

9.25 随时找到数据流的中位数

[题目]: 有一个源源不断地吐出整数的数据流,假设你有足够的空间来保存吐出的数.请设计一个名叫MedianHolder的结构,MedianHolder可以随时取得之前吐出的所有数的中位数 [要求]: 1.如果MedianHolder已经保存了吐出的N个数,那么任意时刻将一个新数加入到MedianHolder的过程,其时间复杂度是O(logN) 2.取得已经吐出的N个数整体的中位数的过程,时间复杂度为O(1) 题目来源:左程云老师<程序员代码面试指南> 原文地址:https://www.cnbl

【Leetcode 大小堆、二分、BFPRT、二叉排序树、AVL】数据流的中位数(295)

题目 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4]?的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数据结构中. double findMedian() - 返回目前所有元素的中位数. 示例: addNum(1) addNum(2) findMedian() -> 1.5 addNum(3) findMed

【python-leetcode295-双堆】数据流的中位数

中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数据结构中.double findMedian() - 返回目前所有元素的中位数.示例: addNum(1)addNum(2)findMedian() -> 1.5addNum(3) findMedian() ->

关于海量数据常用的数据结构

数据结构 应用场景 示例 哈希表 要求所有键值对放入内存,查找可以在常数时间内完成. l  提取某日志访问百度次数最多的IP l  统计不同电话号码的个数 堆 插入和调整需要O(logn)时间,n为堆元素的个数,而获取堆顶元素只需要常数时间. l  求出海量数据前K大的数 l  求海量数据流的中位数 BitMap 通常记录整数出现的情况,用来快速查找.数字判重.删除元素等. l  统计不同电话号码的个数 l  2.5亿个整数中查出不同重复的整数个数 双层桶 两次寻址方式以节省内存,通常用在求第K

我也不知道标题应该定为什么

之前的排序都是基于比较的排序,而桶排序是基于数据状况的排序,这就比较麻烦了,虽然很快,可是分析数据状况是很繁琐的.桶排序 是可以实现稳定排序的.常用有两种实现,一种是计数排序,一种是基数排序 (最后一节). 桶排序的扩展,排序后的最大相邻数差值问题.有N个数字,建立N+1个桶,最大的差值不可能来自一个桶中,只能来自相邻的桶中,这样就可以得到最大差值了. 用数组结构实现大小固定的队列和栈? 数组实现栈,通过一个指针变量指向下一个进入栈中的元素的位置就可以实现了. 用数组实现队列,有3个变量,一个是

LeetCode——295. Find Median from Data Stream

一.题目链接: https://leetcode.com/problems/find-median-from-data-stream 二.题目大意: 给定一段数据流,要求求出数据流中的中位数,其中数据流是动态变化的.如果数据流中的数字个数是奇数的话,则中位数是中间位置的数字:如果数据流中的数字是偶数的话,则中位数是排序好的数据流中的中间两个数的的平均值. 三.题解: 如果数据流是静态不变的话,此时问题是比较好求解的.但是数据流是动态变化的,所以数据流中每次进入一个新的数字时,都要保证能够高效的找