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();
  • 相关阅读:
    What is Continuous Integration?
    10 Essential TypeScript Tips And Tricks For Angular Devs
    javascript 的事件绑定和取消事件
    Directive Controller And Link Timing In AngularJS
    做事情的态度——做精做细
    How to simplify a PHP code with the help of the façade pattern?
    Can we say objects have attributes, states and behaviors?
    represent states with objects
    【转】一次是不算数的
    nyoj27-水池数目 (求连通块数目)【dfs】
  • 原文地址:https://www.cnblogs.com/fu11211129/p/4913848.html
Copyright © 2011-2022 走看看