剑指offer63-数据流中的中位数

数据流中的中位数

https://www.nowcoder.com/practice/9be0172896bd43948f8a32fb954e1be1?tpId=13&tqId=11216&rp=4&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。

//以前不是很理解这种题目,但是现在大概知道是怎么个操作方法,之所以提供两个函数,就是想让大家动态的获取
//比如插入之后,通过getmedian能立马获得中位数,需要动态的更新
不是很清楚这道题目的目的是什么
其实算法题刷多了会有一种感觉:还是要灵活运用一些高级的数据结构,灵活运用之后整个题目的思路会简便,容易理解很多。
这道题目也不例外,要使用到java中的优先队列,优先队列也就是我们常说的堆,在堆排序中大家应该都比较清楚了,在堆中,堆顶严肃一定是最值,要么是最大的要么是最小的。
而本题就需要使用到两个堆来帮助我们快速的完成这件事情。具体的思路可参考:链接:https://www.nowcoder.com/questionTerminal/9be0172896bd43948f8a32fb954e1be1?f=discussion
来源:牛客网

我这里只想强调一个启发:多熟悉高级数据结构并进行灵活的运用。

链接:https://www.nowcoder.com/questionTerminal/9be0172896bd43948f8a32fb954e1be1?f=discussion
来源:牛客网

import java.util.PriorityQueue;
import java.util.Comparator;
public class Solution {
    //小顶堆,用该堆记录位于中位数后面的部分
    private PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();

    //大顶堆,用

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

小白刷剑指offer 文章被收录于专栏

跟着小白一起刷剑指offer,通过讨论加深印象吧~ 没有人不学习就能够掌握知识,知识就是需要学习的~

全部评论
厉害啊老铁
点赞
送花
回复 分享
发布于 2020-04-13 19:56
讲的很详细呀,受益匪浅
点赞
送花
回复 分享
发布于 2020-04-16 15:15
国泰君安
校招火热招聘中
官网直投
请问大佬,为什么是15呢,这个有什么特殊的作用吗
点赞
送花
回复 分享
发布于 2020-05-08 15:49
请问 public int compare(Integer o1, Integer o2) return o2 - o1; 这个代码有啥用啊?
点赞
送花
回复 分享
发布于 2020-09-04 16:34
还有请问为什么返回的时候要加上 new Double 呢? new Double(minHeap.peek() + maxHeap.peek()) / 2;和 new Double(minHeap.peek());
点赞
送花
回复 分享
发布于 2020-09-04 17:17
大佬可以讲一下比较器那里为什么o2 - o1吗?
点赞
送花
回复 分享
发布于 2021-01-10 12:42

相关推荐

8 收藏 评论
分享
牛客网
牛客企业服务