File tree Expand file tree Collapse file tree 1 file changed +20
-8
lines changed Expand file tree Collapse file tree 1 file changed +20
-8
lines changed Original file line number Diff line number Diff line change 1
1
class MedianFinder {
2
- PriorityQueue <Integer > lower , upper ;
2
+ PriorityQueue <Integer > p1 , p2 ;
3
3
4
+ /** initialize your data structure here. */
4
5
public MedianFinder () {
5
- lower = new PriorityQueue <>(Comparator .reverseOrder ());
6
- upper = new PriorityQueue <>();
6
+ p1 = new PriorityQueue <>(Collections .reverseOrder ());
7
+ p2 = new PriorityQueue <>();
7
8
}
8
9
9
10
public void addNum (int num ) {
10
- lower .offer (num );
11
- upper .offer (lower .poll ());
11
+ if (p1 .isEmpty () || p1 .peek () > num ) {
12
+ p1 .offer (num );
13
+ } else {
14
+ p2 .offer (num );
15
+ }
12
16
13
- if (lower .size () < upper .size ()) {
14
- lower .offer (upper .poll ());
17
+ if (p1 .size () > p2 .size () + 1 ) {
18
+ p2 .offer (p1 .poll ());
19
+ } else if (p2 .size () > p1 .size () + 1 ) {
20
+ p1 .offer (p2 .poll ());
15
21
}
16
22
}
17
23
18
24
public double findMedian () {
19
- return lower .size () == upper .size () ? (double ) (lower .peek () + upper .peek ()) / 2 : lower .peek ();
25
+ if (p1 .size () == p2 .size ()) {
26
+ return (double ) (p1 .peek () + p2 .peek ()) / 2.0 ;
27
+ } else if (p1 .size () > p2 .size ()) {
28
+ return (double ) p1 .peek ();
29
+ } else {
30
+ return (double ) p2 .peek ();
31
+ }
20
32
}
21
33
}
You can’t perform that action at this time.
0 commit comments