Advertisement
leoanjos

Find Median from Data Stream

Jun 21st, 2022
830
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | None | 0 0
  1. class MedianFinder {
  2. private:
  3.     multiset<int> nums;
  4.     multiset<int>::iterator mid;
  5.    
  6. public:
  7.     MedianFinder() {
  8.         mid = nums.begin();
  9.     }
  10.    
  11.     void addNum(int num) {
  12.         if (nums.empty()) {
  13.             nums.insert(num);
  14.             mid = nums.begin();
  15.         } else if (num >= *mid && (int) nums.size() % 2 == 0) {
  16.             nums.insert(num);
  17.             mid++;
  18.         } else if (num < *mid && (int) nums.size() % 2 == 1) {
  19.             nums.insert(num);
  20.             mid--;
  21.         } else {
  22.             nums.insert(num);
  23.         }
  24.     }
  25.    
  26.     double findMedian() {
  27.         double ans = *mid;
  28.         if ((int) nums.size() % 2 == 0) {
  29.             auto it = mid; it++;
  30.             ans += *it;
  31.             ans /= 2.0;
  32.         }
  33.        
  34.         return ans;
  35.     }
  36. };
  37.  
  38. /**
  39.  * Your MedianFinder object will be instantiated and called as such:
  40.  * MedianFinder* obj = new MedianFinder();
  41.  * obj->addNum(num);
  42.  * double param_2 = obj->findMedian();
  43.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement