LeetCode 295. 数据流的中位数(大小堆)

文章目录

    • 1. 题目
    • 2. 大小堆解题

1. 题目

中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。

例如,
[2,3,4] 的中位数是 3
[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。
double findMedian() - 返回目前所有元素的中位数。示例:
addNum(1)
addNum(2)
findMedian() -> 1.5
addNum(3) 
findMedian() -> 2进阶:
如果数据流中所有整数都在 0100 范围内,你将如何优化你的算法?
如果数据流中 99% 的整数都在 0100 范围内,你将如何优化你的算法?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-median-from-data-stream

《剑指Offer》同题:面试题41. 数据流中的中位数 链接

2. 大小堆解题

参考我的博客 数据结构 堆(优先队列)

类似题目:
LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现)
LeetCode 703. 数据流中的第K大元素(优先队列)

  • 建立大顶堆(存放数据中较小的部分),小顶堆(存放较大的部分)
  • 同时维护两个堆的大小相等或者大顶堆多一个
  • 那么两个堆的堆顶就是中间的数据,根据奇偶,输出堆顶
class MedianFinder {priority_queue<int> maxHeap;priority_queue<int,vector<int>,greater<int>> minHeap;int n = 0;//数据计数
public:MedianFinder() {}void addNum(int num) {++n;if(maxHeap.size() <= minHeap.size()){if(maxHeap.empty() || num <= minHeap.top())maxHeap.push(num);else//(num > minHeap.top()){maxHeap.push(minHeap.top());minHeap.pop();minHeap.push(num);}    			}else// maxHeap.size() > minHeap.size(){if(num < maxHeap.top()){minHeap.push(maxHeap.top());maxHeap.pop();maxHeap.push(num);}elseminHeap.push(num);}}double findMedian() {if(n%2 == 1)return maxHeap.top();return (maxHeap.top()+minHeap.top())/2.0;}
};

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 利用常识知识图谱进行多跳推理的语言生成方法

笔记整理 | 朱珈徵&#xff0c;天津大学硕士。链接&#xff1a;https://arxiv.org/pdf/2009.11692.pdf动机尽管生成式预训练语言模型在一系列文本生成任务上取得了成功&#xff0c;但在生成过程中需要对基础常识知识进行推理的情况下&#xff0c;它们仍然会受到影响。现有的方法…

成本砍砍砍!不用数据也能用 BERT 做对比学习?

文 | 小昌编 | 小戏大家好&#xff0c;我是小昌&#xff0c;今天和大家聊一聊如何从 BERT 中获取好的句子表征。大家都知道&#xff0c;BERT 的设计初衷是为了获得更好的单词表征。但是&#xff0c;利用 BERT 来表征句子的需求无论在学术界还是工业界都是非常紧迫的。因此&…

Mt-Falcon——Open-Falcon在美团点评的应用与实践

监控系统是整个业务系统中至关重要的一环&#xff0c;它就像眼睛一样&#xff0c;时刻监测机房、网络、服务器、应用等运行情况&#xff0c;并且在出现问题时能够及时做出相应处理。 美团点评刚开始使用的是Zabbix监控系统&#xff0c;几经优化&#xff0c;在当时能够达到2W机器…

论文浅尝 | 以知识图谱为基础的开放域对话生成的目标规划

笔记整理 | 韩振峰&#xff0c;天津大学硕士。链接&#xff1a;https://ojs.aaai.org//index.php/AAAI/article/view/6474动机 之前有关开放域对话生成的神经模型没有有效的机制来管理聊天主题&#xff0c;并且往往会生成不连贯的对话。受到人与人对话策略的启发&#xff0c;本…

LeetCode 378. 有序矩阵中第K小的元素(二分查找)

文章目录1. 题目2. 解题2.1 暴力法2.2 二分查找1. 题目 给定一个 n x n 矩阵&#xff0c;其中每行和每列元素均按升序排序&#xff0c;找到矩阵中第k小的元素。 请注意&#xff0c;它是排序后的第k小元素&#xff0c;而不是第k个元素。 示例: matrix [[ 1, 5, 9],[10, 11,…

LeetCode 341. 扁平化嵌套列表迭代器(双栈)

文章目录1. 题目2. 双栈解题1. 题目 给定一个嵌套的整型列表。设计一个迭代器&#xff0c;使其能够遍历这个整型列表中的所有整数。 列表中的项或者为一个整数&#xff0c;或者是另一个列表。 示例 1: 输入: [[1,1],2,[1,1]] 输出: [1,1,2,1,1] 解释: 通过重复调用 next 直到…

外卖O2O的用户画像实践

美团外卖经过3年的飞速发展&#xff0c;品类已经从单一的外卖扩展到了美食、夜宵、鲜花、商超等多个品类。用户群体也从早期的学生为主扩展到学生、白领、社区以及商旅&#xff0c;甚至包括在KTV等娱乐场所消费的人群。随着供给和消费人群的多样化&#xff0c;如何在供给和用户…

论文浅尝 | 利用开放域触发器知识改进事件检测

笔记整理 | 申时荣&#xff0c;东南大学博士来源&#xff1a;ACL 2020源码&#xff1a;https://github.com/shuaiwa16/ekd.git摘要事件检测&#xff08;ED&#xff09;是文本自动结构化处理的一项基本任务。由于训练数据的规模小&#xff0c;以前的方法在unseen/标记稀疏的触发…

Beyond 预训练语言模型,NLP还需要什么样的知识?

近年来&#xff0c;深度学习技术已广泛应用于NLP领域&#xff0c;但实际应用效果往往受限于缺乏大规模高质量监督样本。2018年底&#xff0c;预训练语言模型横空出世&#xff0c;极大缓解了这个问题&#xff0c;通过“超大规模无监督语料上的预训练语言模型相对少量的监督样本进…

日志级别动态调整——小工具解决大问题

随着外卖业务的快速发展&#xff0c;业务复杂度不断增加&#xff0c;线上系统环境有任何细小波动&#xff0c;对整个外卖业务都可能产生巨大的影响&#xff0c;甚至形成灾难性的雪崩效应&#xff0c;造成巨大的经济损失。每一次客诉、系统抖动等都是对技术人员的重大考验&#…

LeetCode 324. 摆动排序 II

文章目录1. 题目2. 解题1. 题目 给定一个无序的数组 nums&#xff0c;将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。 示例 1: 输入: nums [1, 5, 1, 1, 6, 4] 输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6] 示例 2: 输入: nums [1, 3, 2, 2, 3,…

最全的Pycharm debug技巧

最全的Pycharm debug技巧&#xff1a; 工欲善其事&#xff0c;必先利其器。无论你的 IDE 是 IntelliJ IDEA、Pycharm、WebStorm、GoLang、还是PhpStorm &#xff0c;调试器都是标配。在遇到有问题的程序时&#xff0c;合理的利用调试器的跟踪和断点技巧&#xff0c;可以很快的…

OpenKG祝大家端午安康

—????????OpenKG祝大家端午安康????????—

两个月,刷了八千篇Arxiv,我发现……

文 | 白鹡鸰编 | 小轶从五月初到现在&#xff0c;大约刷了八千篇Arxiv之后&#xff0c;我发现我有毛病。当然&#xff0c;这是读论文上头时的牢骚&#xff0c;不是真心话&#xff0c;只是说&#xff0c;我在Arxiv上投入的精力的努力&#xff0c;与我预计的收获不成正比。故事的…

深度学习在美团的应用

近年来&#xff0c;深度学习在语音、图像、自然语言处理等领域取得非常突出的成果&#xff0c;成了最引人注目的技术热点之一。美团这两年在深度学习方面也进行了一些探索&#xff0c;其中在自然语言处理领域&#xff0c;我们将深度学习技术应用于文本分析、语义匹配、搜索引擎…

LeetCode 315. 计算右侧小于当前元素的个数(二叉查找树二分查找归并排序逆序数总结)

文章目录1. 题目2. 解题2.1 二叉查找树2.2 二分插入2.3 归并排序1. 题目 给定一个整数数组 nums&#xff0c;按要求返回一个新数组 counts。数组 counts 有该性质&#xff1a; counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例: 输入: [5,2,6,1] 输出: [2,1,1…

领域应用 | 金融资管领域知识图谱的构建和应用

转载公众号 | DataFunTalk分享嘉宾&#xff1a;李渔 熵简科技 联合创始人编辑整理&#xff1a;唐汝佳出品平台&#xff1a;DataFunTalk导读&#xff1a;本次分享的主题是金融资管领域知识图谱的构建和应用&#xff0c;主要介绍如何运用大数据、AI这些技术手段&#xff0c;来帮助…

我分析了ACL21论文列表,发现对比学习已经...

文 | 花小花Posy小伙伴们&#xff0c;好久不见呀&#xff0c;小花又回来了&#xff01;最近关注对比学习&#xff0c;所以ACL21的论文列表出来后&#xff0c;小花就搜罗了一波&#xff0c;好奇NLPers们都用对比学习干了什么&#xff1f;都是怎么用的呀&#xff1f;效果怎样呀&a…

LeetCode 629. K个逆序对数组(DP)

文章目录1. 题目2. 动态规划3. 优化的DP1. 题目 给出两个整数 n 和 k&#xff0c;找出所有包含从 1 到 n 的数字&#xff0c;且恰好拥有 k 个逆序对的不同的数组的个数。 逆序对的定义如下&#xff1a;对于数组的第i个和第 j个元素&#xff0c;如果满i < j且 a[i] > a[…

快速的找出元素是否在list中 python

number [[1,2],[3,2]] num np.array(number) np.argwhere(num2) np.argwhere(num2) array([[0, 1], [1, 1]], dtypeint64) 注意&#xff1a;只能是维度相同的时候&#xff0c;才能用该方法。 om ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or nd…