zoukankan      html  css  js  c++  java
  • LeetCode OJ: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

    如上,可以维护一个最大堆以及一个最小堆,如果小堆数的数量大于大堆数量。那么可以把小堆中的最小值返还给大堆。(注意这个值相当于大堆中的最大者,因为小堆中的值都是大堆中转移过去的)。代码如下:

     1 class MedianFinder {
     2 public:
     3 
     4     // Adds a number into the data structure.
     5     void addNum(int num) {
     6         maxHeap.push(num);
     7         int tmp = maxHeap.top();
     8         maxHeap.pop();    
     9         minHeap.push(tmp);
    10         if(minHeap.size() > maxHeap.size()){
    11             tmp = minHeap.top();
    12             minHeap.pop();
    13             maxHeap.push(tmp);
    14         }
    15     }
    16 
    17     // Returns the median of current data stream
    18     double findMedian() {
    19         int m = maxHeap.size();
    20         int n = minHeap.size();
    21         if(m > n)
    22             return maxHeap.top()/1.0;
    23         else
    24             return (maxHeap.top() + minHeap.top())/2.0;
    25     }
    26 private:
    27     priority_queue<int, vector<int>, greater<int>> maxHeap;
    28     priority_queue<int, vector<int>, less<int>> minHeap;
    29 };
  • 相关阅读:
    JQ 选择器大全
    .NET SOCKET通信编程
    .Net中的Socket通讯
    SQL Server 2008中新增的变更数据捕获(CDC)和更改跟踪
    C# 编写Window服务基础(一)
    更改windows服务的配置文件app.config
    SQLServer数据库表中将指定列分组转一行
    在c#中使用mongo-csharp-driver操作mongodb
    java 线程池的原理
    Java并发编程:ThreadLocal的使用以及实现原理解析
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/5016258.html
Copyright © 2011-2022 走看看