class MedianFinder {
private PriorityQueue<Integer> minHeap;
private PriorityQueue<Integer> maxHeap;
public MedianFinder() {
minHeap = new PriorityQueue<Integer>();
maxHeap = new PriorityQueue<Integer>(500, Collections.reverseOrder());
}
// Adds a number into the data structure.
public void addNum(int num) {
if (maxHeap.size() == 0 || num <= maxHeap.peek()) {
maxHeap.add(num);
}
else {
minHeap.add(num);
}
if (maxHeap.size() - minHeap.size() >= 2) {
minHeap.add(maxHeap.poll());
}
else if (minHeap.size() > maxHeap.size()) {
maxHeap.add(minHeap.poll());
}
}
// Returns the median of current data stream
public double findMedian() {
double median = 0;
if (maxHeap.size() != 0) {
if ((maxHeap.size() + minHeap.size()) % 2 != 0) {
median = (double) maxHeap.peek();
}
else {
median = (double) (maxHeap.peek() + minHeap.peek()) / 2;
}
}
return median;
}
};
Sunday, January 3, 2016
[LeetCode] Find Median from Data Stream
思路是使用一个minHeap和maxHeap。不知道有没有更好的方法。
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment