题意是这样的,给你一个序列寻找中位数?
其实这个可以转化为TopK问题,但是假如这个数组不断的变化呢?这个时候可以考虑使用堆来解决。
这是一个很经典的问题,值得反思和学习。
参考这一道题leetcode 295. Find Median from Data Stream 双优先级队列 + 中位数查找
代码如下:
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <string>
#include <climits>
#include <algorithm>
#include <sstream>
using namespace std;
class MedianFinder
{
priority_queue<long> small, large;
public:
void addNum(int num)
{
small.push(num);
large.push(-());
small.pop();
if (small.size() < large.size())
{
small.push(-());
large.pop();
}
}
double findMedian()
{
return small.size() > large.size()
? ()
: (() - ()) / 2.0;
}
};