【剑指 Offer 】41. 数据流中的中位数
程序员文章站
2024-02-13 14:00:16
...
题目:41. 数据流中的中位数
思路:
写一个数据结构,实现数据流的动态添加和查找实时的中位数。(奇数个的时候中位数为A
的堆顶元素)
- 静态变量:小顶堆
A
、大顶堆B
; - 存放数据:
- 先判断
A
和B
的大小: - 相等的话,就存在
A
中; - 不相等的话,就存在
B
中;
- 先判断
- 读取中位数:
- 判断
A
和B
的大小: - 相等就取两者堆顶元素的平均值;
- 不相等,就弹出
A
的堆顶元素;
- 判断
代码:
class MedianFinder {
// 静态变量
Queue<Integer> A,B;
// 构造方法
public MedianFinder() {
A = new PriorityQueue<>();
B = new PriorityQueue<>((x,y)->(y-x));
}
// 添加数据
public void addNum(int num) {
if(A.size() == B.size()){
B.offer(num);
A.offer(B.poll());
}else{
A.offer(num);
B.offer(A.poll());
}
}
// 读取中位数
public double findMedian() {
if(A.size() == B.size()){
return (A.peek() + B.peek())/2.0;
}else{
return A.peek()/1.0;
}
}
}
上一篇: 11-07 计数质数
推荐阅读
-
《剑指offer》刷题笔记(树):数据流中的中位数
-
剑指offer:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
-
剑指offer:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
-
【输入一个整数,输出该数二进制表示中1的个数,其中负数用补码表示---------【剑指offer】】
-
输入一个整数,输出该数二进制表示中1的个数(其中负数用补码表示)-- 剑指offer
-
【LeeCode 中等 数学 python3】剑指 Offer 43. 1~n整数中1出现的次数
-
剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)
-
【剑指 Offer 53 - II】0~n-1中缺失的数字
-
剑指offer书(53)-2:0-n-1中缺失的数字
-
剑指OFFER----53-2、0~n-1中缺失的数字(js实现)