java 通过最大堆和最小堆实现

数据流中的中位数

http://www.nowcoder.com/questionTerminal/9be0172896bd43948f8a32fb954e1be1

最小堆放较大的一半元素,
最大堆放较小的一半元素;
insert的时候先向最小堆放入(先放入最大堆,在交换至最小堆,可确保最小堆中的元素一直是较大的一半)

import java.util.*;
public class Solution {

   // 最大堆
    PriorityQueue<Integer> max = new PriorityQueue<>((o1,o2)-> o2-o1);

    // 最小堆
    PriorityQueue<Integer> min = new PriorityQueue<>();

    // size
    int size=0;
    public void Insert(Integer num) {
        size++;
        // 先放入最小堆
        if (size%2==1){
            max.add(num);
            min.add(max.poll());
            // 在放入最大堆
        }else {
            min.add(num);
            max.add(min.poll());
        }
    }

    public Double GetMedian() {
        //奇数
        if ((size&1)==1){
            System.out.println("奇数");
            return new Double(min.peek());
        }else {
            return (min.peek()+max.peek())/2.0;
        }
    }


}
全部评论

相关推荐

牛客nb666号:见天才的门槛罢了查看图片
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务