数据流中的中位数 Find Median from Data Stream

2019-04-17 16:34:50

问题描述:

问题求解:

class MedianFinder {
    PriorityQueue<Integer> smaller;
    PriorityQueue<Integer> larger;

    /** initialize your data structure here. */
    public MedianFinder() {
        smaller = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        larger = new PriorityQueue();
    }

    public void addNum(int num) {
        if (smaller.isEmpty()) smaller.add(num);
        else if (num < smaller.peek()) {
            smaller.add(num);
            if (smaller.size() - 2 == larger.size()) 
                larger.add(smaller.poll());
        }
        else {
            larger.add(num);
            if (larger.size() > smaller.size()) {
                smaller.add(larger.poll());
            }
        }
    }

    public double findMedian() {
        int n = smaller.size() + larger.size();
        if (n % 2 == 0) return (smaller.peek() + larger.peek()) * 0.5;
        else return smaller.peek() * 1.0;
    }   
}

  

猜你喜欢

转载自www.cnblogs.com/TIMHY/p/10724493.html