数据流的中位数

小伙伴们大家好,今天给大家带来一道算法题:寻找数据流的中位数。

也许小伙伴们会有疑问,我直接把数组sort一下,根据奇偶数量返回不就行了吗?这样当然可以,不过不今天给大家带来更有趣的方法。

先给大家看一下代码:

cpp 复制代码
#include<iostream>
#include<queue>
using namespace std;
double getmid(int *a,int n){
	priority_queue<int,vector<int>,greater<int> >q1;
	priority_queue<int,vector<int>,less<int> >q2;
	for(int i=0;i<n;i++){
		if(i==0){
			q2.push(a[i]);
			continue;
		}
		if(a[i]>q2.top()){
			q1.push(a[i]);
		}
		else{
			q2.push(a[i]);
		}
		int x=q1.size()-q2.size();
		if(x>=2){
			q2.push(q1.top());
			q1.pop();
		}
		if(-x>=2){
			q1.push(q2.top());
			q2.pop();
		}
	}
	if(n&1){
		if(q2.size()==n/2){
			return q1.top();
		}
		else{
			return q2.top(); 
		} 
	}
	else{
		return (q1.top()+q2.top())/2.0;
	}
}
int main(){
	int arr[8]={3,4,7,5,3,2,9,6};
	double mid=getmid(arr,8); 
	cout<<mid;
}

准备一个大根堆和 一个小根堆。当数组中的元素是第一个数时,存入大根堆。以后元素到来时,如果比大根堆的堆顶大就进入小根堆,否则留在大根堆。当大根堆比小根堆数量多2时,就将大根堆的堆顶放到小根堆中,当小根堆比大根堆数量多2时,就将小根堆的堆顶放到大根堆中。当数组遍历完成后,大根堆保留了n/2或n/2+1个小元素,小根堆保留了剩下的大元素。我们在根据数组元素个数的奇偶返回相应值即可。具体看上述代码。

这道算法题比较简单,主要是锻炼大家思维的,谢谢观看!!多多点赞支持。

相关推荐
CoovallyAIHub19 分钟前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub21 分钟前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github
CoovallyAIHub44 分钟前
开源:YOLO最强对手?D-FINE目标检测与实例分割框架深度解析
人工智能·算法·github
CoovallyAIHub1 小时前
OpenClaw:从“19万星标”到“行业封杀”,这只“赛博龙虾”究竟触动了谁的神经?
算法·架构·github
刀法如飞1 小时前
程序员必须知道的核心算法思想
算法·编程开发·算法思想
徐小夕3 小时前
pxcharts Ultra V2.3更新:多维表一键导出 PDF,渲染兼容性拉满!
vue.js·算法·github
CoovallyAIHub3 小时前
OpenClaw一脚踩碎传统CV?机器终于不再只是看世界
深度学习·算法·计算机视觉
CoovallyAIHub4 小时前
仅凭单目相机实现3D锥桶定位?UNet-RKNet破解自动驾驶锥桶检测难题
深度学习·算法·计算机视觉
zone77394 小时前
002:RAG 入门-LangChain 读取文本
后端·算法·面试
得物技术5 小时前
得物社区搜推公式融合调参框架-加乘树3.0实战
算法