zoukankan      html  css  js  c++  java
  • leetcode@ [295]Find Median from Data Stream

    https://leetcode.com/problems/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     
     3 private: 
     4     priority_queue<int,vector<int>, greater<int> > maxHeap;
     5     priority_queue<int> minHeap;
     6     
     7 public:
     8 
     9     // Adds a number into the data structure.
    10     void addNum(int num) {
    11          if(minHeap.empty() || num <= minHeap.top()){
    12              if(minHeap.size() > maxHeap.size()){
    13                  maxHeap.push(minHeap.top());
    14                  minHeap.pop();
    15              }
    16              minHeap.push(num);
    17          }
    18          else if(maxHeap.empty() || num > maxHeap.top()){
    19              if(maxHeap.size() > minHeap.size()){
    20                  minHeap.push(maxHeap.top());
    21                  maxHeap.pop();
    22              }
    23              maxHeap.push(num);
    24          }
    25          else{
    26              if(maxHeap.size() >= minHeap.size()) minHeap.push(num);
    27              else if(minHeap.size() > maxHeap.size()) maxHeap.push(num);
    28          }
    29     }
    30 
    31     // Returns the median of current data stream
    32     double findMedian() {
    33         if(minHeap.size() == maxHeap.size()) return (double) (minHeap.top() + maxHeap.top()) / 2.0;
    34         else if(minHeap.size() > maxHeap.size()) return (double) minHeap.top();
    35         else return (double) maxHeap.top();
    36     }
    37 };
    38 
    39 // Your MedianFinder object will be instantiated and called as such:
    40 // MedianFinder mf;
    41 // mf.addNum(1);
    42 // mf.findMedian();
  • 相关阅读:
    UVA 10608 Friends
    UVA 10806 Dijkstra, Dijkstra.
    HDU 3715 Go Deeper
    poj1315
    poj1383
    poj1650
    poj1265
    poj1523
    RedHat9.0虚拟机安装
    注册DirectShow filter时应该注意中文路径
  • 原文地址:https://www.cnblogs.com/fu11211129/p/4913848.html