class MedianFinder { priority_queue<int> up; priority_queue<int, vector<int>, greater<int> > down; public: // Adds a number into the data structure. void addNum(int num) { if(up.empty() || num <= up.top()) { up.push(num); } else if(down.empty() || num >= down.top()) { down.push(num); } else { up.push(num); } if(up.size() >= down.size() + 2) { int t = up.top(); up.pop(); down.push(t); } else if(down.size() >= up.size() + 2){ int t = down.top(); down.pop(); up.push(t); } } // Returns the median of current data stream double findMedian() { if(up.size() > down.size()) return up.top(); else if(down.size() > up.size()) return down.top(); return (up.top() + down.top())/2.0; } };
Tuesday, October 20, 2015
[LeetCode] Find Median from Data Stream
Question can be found https://leetcode.com/problems/find-median-from-data-stream/