zoukankan      html  css  js  c++  java
  • 295. 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 data structure that supports the following two operations:

    • void addNum(int num) - Add a integer number from the data stream to the data structure.
    • double findMedian() - Return the median of all elements so far.

    For example:

    add(1)
    add(2)
    findMedian() -> 1.5
    add(3) 
    findMedian() -> 2

    public class MedianFinder {
        int count = 0;
        int median = 0;
        PriorityQueue<Integer> q1 = new PriorityQueue<Integer>(new Comparator<Integer>(){
            public int compare(Integer a, Integer b){
                return b-a;
            }
        });
        PriorityQueue<Integer> q2 = new PriorityQueue<Integer>();
        // Adds a number into the data structure.
        public void addNum(int num) {
            count++;
            q1.add(num);
            q2.add(q1.poll());
            if(q1.size() < q2.size())
                q1.add(q2.poll());
        }
    
        // Returns the median of current data stream
        public double findMedian() {
            if(count > 0 && count % 2 == 0)
                return ((double)(q1.peek()) + (double)(q2.peek()))/2.0;
            else
                return q1.peek();
        }
    };
    
    // Your MedianFinder object will be instantiated and called as such:
    // MedianFinder mf = new MedianFinder();
    // mf.addNum(1);
    // mf.findMedian();
  • 相关阅读:
    Android 操作系统的内存回收机制(转载)
    如何减少代码中的分支语句
    Android中动画学习
    Android中 AsyncTask
    Linux安装后更新系统
    看百度宣传片
    可爱的linux mint 11
    ubuntu 修改root密码
    SHA256加密算法封装[我的代码库]
    使用maven,svn和CruiseControl做持续集成
  • 原文地址:https://www.cnblogs.com/joannacode/p/6132575.html
Copyright © 2011-2022 走看看