news 2026/1/25 3:03:43

【剑斩OFFER】算法的暴力美学——LeetCode 295 题:数据流的中位数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【剑斩OFFER】算法的暴力美学——LeetCode 295 题:数据流的中位数


一、题目描述

二、算法原理

思路:建立大小堆

如果这个数组是有序的,那么把他们的前半部分放到大根堆,后半部分放到小根堆,那么他们的中间值就是如果这两个堆的节点加起来是偶数,那么两个堆顶加起来 / 2 就行,那么如果是奇数那么返回大根堆的堆顶元素就行;

怎么让这两个数组的值是有序的:

1)约定:大根堆的节点数目可以比小根堆的多一个;

2)如果大根堆的节点数目 == 小根堆的节点数目,那么:

如果 :add 的值 num 大于 大根堆的堆顶,就放到小根堆里面,此时违反了约定,所以把小根堆的堆顶元素入大根堆,然后让小根堆 pop

如果:num <= 大根堆的堆顶元素 || 大根堆为空,那么直接入大根堆

3)如果大根堆的节点数目 > 小根堆的节点数目,那么:

如果:num > 大根堆的堆顶元素,直接入小根堆

如果:num <= 大根堆的堆顶元素,先入大根堆,再把大根堆的堆顶元素入小根堆,再让大根堆 pop

4)不存在大根堆的节点数目 < 小根堆的节点数目,因为上面的 3 条规则使然;

三、代码实现

class MedianFinder { public: MedianFinder() { } void addNum(int num) { if(maxi.size() == mini.size()) { if(maxi.empty() || num <= maxi.top()) maxi.push(num); else { mini.push(num); maxi.push(mini.top()); mini.pop(); } } else if(maxi.size() > mini.size()) { if(num > maxi.top()) mini.push(num); else { maxi.push(num); mini.push(maxi.top()); maxi.pop(); } } //因为上面的判断维持 maxi.size() > mini.size(),所以就不存在 maxi.size() < mini.size() } double findMedian() { if((maxi.size() + mini.size()) % 2 == 0) return ((double)maxi.top() + (double)mini.top()) / 2; else return maxi.top(); } private: priority_queue<int> maxi;//大堆 priority_queue<int,vector<int>,greater<int>> mini; }; /** * Your MedianFinder object will be instantiated and called as such: * MedianFinder* obj = new MedianFinder(); * obj->addNum(num); * double param_2 = obj->findMedian(); */
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/18 5:05:30

AI量化投资系统深度解析:多智能体协作如何重塑金融决策范式

AI量化投资系统深度解析&#xff1a;多智能体协作如何重塑金融决策范式 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 在金融科技快速发展的今天…

作者头像 李华
网站建设 2026/1/20 18:24:15

OpenCode智能编程助手:VS Code扩展终极指南

OpenCode智能编程助手&#xff1a;VS Code扩展终极指南 【免费下载链接】opencode 一个专为终端打造的开源AI编程助手&#xff0c;模型灵活可选&#xff0c;可远程驱动。 项目地址: https://gitcode.com/GitHub_Trending/openc/opencode OpenCode是一款专为现代开发者设…

作者头像 李华
网站建设 2026/1/20 21:36:59

WinDbg Preview下载常用命令清单:入门必看整理

从零开始掌握 WinDbg Preview&#xff1a;新手必会的调试命令实战指南 你是不是也曾在系统崩溃后面对一个 .dmp 文件束手无策&#xff1f; 或者在开发驱动时遇到蓝屏&#xff08;BSOD&#xff09;&#xff0c;却不知道从何查起&#xff1f; 别担心&#xff0c; WinDbg Pre…

作者头像 李华
网站建设 2026/1/19 20:10:34

边缘计算翻译:HY-MT1.5-1.8B嵌入式部署指南

边缘计算翻译&#xff1a;HY-MT1.5-1.8B嵌入式部署指南 1. 引言 随着多语言交流需求的快速增长&#xff0c;实时、低延迟的翻译服务在智能设备、移动应用和边缘计算场景中变得愈发重要。传统云端翻译方案虽然性能强大&#xff0c;但受限于网络延迟和数据隐私问题&#xff0c;…

作者头像 李华
网站建设 2026/1/18 5:03:48

YOLO26训练避坑指南:镜像部署常见问题全解析

YOLO26训练避坑指南&#xff1a;镜像部署常见问题全解析 在深度学习目标检测领域&#xff0c;YOLO系列模型凭借其高效、准确和易用的特性&#xff0c;已成为工业界与学术界的首选方案之一。然而&#xff0c;在实际项目落地过程中&#xff0c;开发者常常面临环境配置复杂、依赖…

作者头像 李华
网站建设 2026/1/22 13:47:32

服务打不开怎么解决?cv_resnet18_ocr-detection故障排查

服务打不开怎么解决&#xff1f;cv_resnet18_ocr-detection故障排查 1. 问题背景与场景定位 在使用 cv_resnet18_ocr-detection OCR文字检测模型镜像时&#xff0c;用户可能会遇到“服务打不开”的问题。该镜像由开发者“科哥”构建&#xff0c;基于ResNet18主干网络实现OCR文…

作者头像 李华