Leetcode Find Median from Data Stream

来源:互联网 发布:淘宝上有高仿手表买么 编辑:程序博客网 时间:2024/04/28 17:23

题意:找出一列数组中的中位数。

思路:使用multiset,并维护一个指针,指向中位数,根据新加入的数的大小来向左向右移动指针。

class MedianFinder {public:    /** initialize your data structure here. */    MedianFinder() {        mid = INT_MIN;        cout = 0;        it = s.begin();    }        void addNum(int num) {        s.insert(num);        cout ++;        if((double)num >= mid || (double)num >= *it) {            if(cout % 2 == 0) {                tempit = it;                tempit ++;                mid = (*it + *tempit) / 2;            }            else {                it ++;                mid = *it;            }        }        else {            if(cout % 2 == 0) {                tempit = it;                it --;                mid = (*it + *tempit) / 2;            }            else {                mid = *it;            }        }                return;    }        double findMedian() {        return mid;    }    private:    double mid;    int cout;    std::multiset<double> s;    std::multiset<double>::iterator it;    std::multiset<double>::iterator tempit;};/** * Your MedianFinder object will be instantiated and called as such: * MedianFinder obj = new MedianFinder(); * obj.addNum(num); * double param_2 = obj.findMedian(); */

另一种思路是维护两个优先队列,一个大于中位数,一个小于中位数。

0 0
原创粉丝点击