Find Median from Data Stream Posted on 2018-10-06 Descriptionhttps://leetcode.com/problems/find-median-from-data-stream/description/ Solution123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354class MedianFinder {private: vector<double> maxHeap; vector<double> minHeap;public: /** initialize your data structure here. */ MedianFinder() { } void addNum(int num) { int size = maxHeap.size() + minHeap.size(); if (size & 1) { //Insert to minHeap; double maxItem = maxHeap[0]; if (num >= maxItem) { minHeap.push_back(num); push_heap(minHeap.begin(), minHeap.end(), greater<double>()); }else { maxHeap.push_back(num); push_heap(maxHeap.begin(), maxHeap.end(), less<double>()); minHeap.push_back(maxHeap[0]); pop_heap(maxHeap.begin(), maxHeap.end(), less<double>()); maxHeap.pop_back(); push_heap(minHeap.begin(), minHeap.end(), greater<double>()); } }else { if (minHeap.empty() || num <= minHeap[0]) { maxHeap.push_back(num); push_heap(maxHeap.begin(), maxHeap.end(), less<double>()); } else { minHeap.push_back(num); push_heap(minHeap.begin(), minHeap.end(), greater<double>()); maxHeap.push_back(minHeap[0]); pop_heap(minHeap.begin(), minHeap.end(), greater<double>()); minHeap.pop_back(); push_heap(maxHeap.begin(), maxHeap.end(), less<double>()); } } } double findMedian() { int size = maxHeap.size() + minHeap.size(); return size & 1 ? maxHeap[0] : (minHeap[0] + maxHeap[0]) / 2.0; }};/** * Your MedianFinder object will be instantiated and called as such: * MedianFinder obj = new MedianFinder(); * obj.addNum(num); * double param_2 = obj.findMedian(); */