STL栈、队列、堆的算法笔记(5)——【寻找中位数】

寻找中位数

题目:

设计一个数据结构,该数据结构动态维护一组数据,且支持如下操作:
1.添加元素: void addNum(int num),将整型num添加至数据结构中。
2.返回数据的中位数: double findMedian(),返回其维护的数据的中位数。
中位数定义:
1.若数据个数为奇数,中位数是该组数排序后中间的数。[1,2,3] -> 2
2.若数据个数为偶数,中位数是该组数排序后中间的两个数字的平均值。[1,2,3,4] -> 2.5

解题图解:

STL栈、队列、堆的算法笔记(5)——【寻找中位数】_第1张图片
STL栈、队列、堆的算法笔记(5)——【寻找中位数】_第2张图片
STL栈、队列、堆的算法笔记(5)——【寻找中位数】_第3张图片
STL栈、队列、堆的算法笔记(5)——【寻找中位数】_第4张图片
STL栈、队列、堆的算法笔记(5)——【寻找中位数】_第5张图片

解题代码:

// 寻找中位数.cpp 
#include 
#include
using namespace std;
class Median
{
public:
	double getMedian() {
		if (big_queue.size()==small_queue.size())
		{
			return (double)(big_queue.top() + small_queue.top()) / 2;
		}
		else if (big_queue.size() > small_queue.size()) {
			return big_queue.top();
		}
		return small_queue.top();
	}
	void addNum(int num) {
		if (big_queue.empty())
		{
			big_queue.push(num);
			return;
		}
		if (big_queue.size() == small_queue.size()) {
			if (big_queue.top()>num)
			{
				big_queue.push(num);
			}
			else {
				small_queue.push(num);
			}
		}
		else if (big_queue.size() > small_queue.size())
		{
			if (big_queue.top() big_queue;
	priority_queue, greater> small_queue;
};
int main()
{
	Median median;
	median.addNum(3);
	median.addNum(7);
	median.addNum(12);
	median.addNum(8);
	double m = median.getMedian();
	cout << m << endl;
}

谢谢观看。

你可能感兴趣的:(算法)