思想:
建立两个排序碓(优先队列),大根堆和小根堆。
- 个数为奇数时,元素存大根堆,放count-count/2的小数。
- 个数为偶数时,元素存小根堆,放count/2的大数。
当个数为奇数时
if(元素>小根堆的堆顶)
swap(元素,小根堆的堆顶)
元素加入大根堆
偶数时
if(元素<大根堆的堆顶)
swap(元素,大根堆的堆顶)
元素加入小根堆
代码如下
import java.util.Comparator;
import java.util.PriorityQueue;
public class Solution {
PriorityQueue<Integer>queueMax=new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;//从大到小
}
});
PriorityQueue<Integer>queueMin=new PriorityQueue<>();
int count=0;
public void Insert(Integer num) {
count++;
if(count%2==1){
if(queueMin.isEmpty()==false&&num>queueMin.peek()){
queueMin.offer(num);
num=queueMin.poll();
}
queueMax.offer(num);
}
else {
if(queueMax.isEmpty()==false&&num<queueMax.peek()){
queueMax.offer(num);
num=queueMax.poll();
}
queueMin.offer(num);
}
}
public Double GetMedian() {
if(count%2==1){
return (double)queueMax.peek();
}
else {
return (double)(queueMax.peek()+queueMin.peek())/2.0;
}
}
}