直接使用PriorityQueue构造大小堆,大顶堆放小于中位数的集合,小顶堆放大于中位数的集合,
取得时候,如果是奇数,就取前半部分的最大数,如果是偶数,就取前半部分的最大数和后半部分的最小数的平均数
往里放的时候,如果总数是偶数,就往前放,需要现在后半部分过滤一遍选出后半部分最小的数往前放,奇数同理
class Solution {
private PriorityQueue<Integer> maxHeap=new PriorityQueue(new Comparator<Integer>(){
public int compare(Integer i1,Integer i2){
return i2-i1;
}
});//小于中位数的集合
private PriorityQueue<Integer> minHeap=new PriorityQueue();//大于中位数的集合
public void insert(Integer num) {
if(((minHeap.size()+maxHeap.size())&1)==1){
//奇数个,就往后半部分加
maxHeap.offer(num);
minHeap.offer(maxHeap.poll());
}else{
//偶数个,就往前半部分加
minHeap.offer(num);
maxHeap.offer(minHeap.poll());
}
}
public Double getMedian() {
if(((minHeap.size()+maxHeap.size())&1)==1){
return (double)maxHeap.peek();
}else{
return ((double)maxHeap.peek()+minHeap.peek())/2;
}
}
}
看了这个头像我想打人
使用vector每次排序会怎样啊?
啊啊,秀