-
-
Notifications
You must be signed in to change notification settings - Fork 161
/
Copy pathMedianFinder.java
42 lines (35 loc) · 1.04 KB
/
MedianFinder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package java1.algorithms.heap;
import java.util.PriorityQueue;
// TC: O(log n) SC: O(log n)
public class MedianFinder {
//Contains big elements
PriorityQueue<Integer> minHeap;
//Contains small elements
PriorityQueue<Integer> maxHeap;
MedianFinder() {
minHeap = new PriorityQueue<>((a, b) -> a-b );
maxHeap = new PriorityQueue<>((a, b) -> b-a);
}
private void addNum(int num) {
minHeap.add(num);
maxHeap.add(minHeap.poll());
if(minHeap.size() < maxHeap.size()) {
minHeap.add(maxHeap.poll());
}
}
private double findMedian() {
if(minHeap.size() == maxHeap.size()) {
return (minHeap.peek() + maxHeap.peek())/2.0;
}
return minHeap.peek();
}
public static void main(String[] args) {
MedianFinder median = new MedianFinder();
median.addNum(40);
median.addNum(30);
median.addNum(50);
median.addNum(10);
median.addNum(20);
System.out.println(median.findMedian());
}
}