https://leetcode.com/problems/find-median-from-data-stream/description/
class MedianFinder {
public:
vector<int> nums;
/** initialize your data structure here. */
MedianFinder() {
}
void addNum(int num) {
int left = 0, right = nums.size()-1;
while (left<=right) {
int mid = (left+right)/2;
if(nums[mid] < num) left = mid+1;
else right = mid-1;
}
nums.insert(nums.begin()+left, num);
}
double findMedian() {
int n = nums.size();
if(n%2==1) return nums[n/2];
return (nums[n/2-1]+nums[n/2])/2.0;
}
};
/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder obj = new MedianFinder();
* obj.addNum(num);
* double param_2 = obj.findMedian();
*/