题意:找出一列数组中的中位数。
思路:使用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();
*/另一种思路是维护两个优先队列,一个大于中位数,一个小于中位数。
本文介绍了一种高效的数据结构及算法实现,用于在不断变化的整数集合中找到中位数。通过使用multiset和迭代器,或者采用两个优先队列的方法,能够实时更新并获取中位数。
580

被折叠的 条评论
为什么被折叠?



