File tree Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Original file line number Diff line number Diff line change 1+ class MedianFinder {
2+ private Queue <Integer > smallHeap ; //small elements - maxHeap
3+ private Queue <Integer > largeHeap ; //large elements - minHeap
4+
5+ public MedianFinder () {
6+ smallHeap = new PriorityQueue <>((a , b ) -> b - a );
7+ largeHeap = new PriorityQueue <>((a , b ) -> a - b );
8+ }
9+
10+ public void addNum (int num ) {
11+ smallHeap .add (num );
12+ if (smallHeap .size () - largeHeap .size () > 1 || !largeHeap .isEmpty () && smallHeap .peek () > largeHeap .peek ()) {
13+ largeHeap .add (smallHeap .poll ());
14+ }
15+ if (largeHeap .size () - smallHeap .size () > 1 ) {
16+ smallHeap .add (largeHeap .poll ());
17+ }
18+ }
19+
20+ public double findMedian () {
21+ if (smallHeap .size () == largeHeap .size ()) {
22+ return (double )(largeHeap .peek () + smallHeap .peek ()) / 2 ;
23+ } else if (smallHeap .size () > largeHeap .size ()) {
24+ return (double )smallHeap .peek ();
25+ } else {
26+ return (double )largeHeap .peek ();
27+ }
28+ }
29+ }
30+
31+ /**
32+ * Your MedianFinder object will be instantiated and called as such:
33+ * MedianFinder obj = new MedianFinder();
34+ * obj.addNum(num);
35+ * double param_2 = obj.findMedian();
36+ */
You can’t perform that action at this time.
0 commit comments