剑指offer-63-数据流中位数
数据流中的中位数
http://www.nowcoder.com/questionTerminal/9be0172896bd43948f8a32fb954e1be1
思路
- 思路 用两个堆维护中位数
代码
import java.util.*;
public class Solution {
PriorityQueue<Integer> q1=new PriorityQueue<>((o1,o2)->Integer.compare(o2,o1));
PriorityQueue<Integer> q2=new PriorityQueue<>();
public void Insert(Integer num) {
if(q1.size()==0 ||q2 .size()==0){
if(q1.size()==0){
q1.add(num);
}else{
q2.add(num);
}
return;
}
// 与q1堆 比较交换
if(num<=q1.peek()){
q1.add(num);
num=q1.poll();
}
// 与q2堆 比较交换
if(num>q2.peek()){
q2.add(num);
num=q2.poll();
}
//现在 num介于q1,q2之间
if(q1.size()<=q2.size()){
q1.add(num);
}else{
q2.add(num);
}
}
public Double GetMedian() {
double min=q1.size()==0?0:q1.peek();
double max=q2.size()==0?0:q2.peek();
if(q1.size()==q2.size()){
return (min+max)/2;
}else{
return min;
}
}
} 剑指offer与数据结构 文章被收录于专栏
本专栏包括剑指offer题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构
老板电器公司氛围 192人发布