Skip to content

Commit e361e6e

Browse files
committed
Update 295_Find_Median_from_Data_Stream.java
1 parent 1e3b8bb commit e361e6e

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed
Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,33 @@
11
class MedianFinder {
2-
PriorityQueue<Integer> lower, upper;
2+
PriorityQueue<Integer> p1, p2;
33

4+
/** initialize your data structure here. */
45
public MedianFinder() {
5-
lower = new PriorityQueue<>(Comparator.reverseOrder());
6-
upper = new PriorityQueue<>();
6+
p1 = new PriorityQueue<>(Collections.reverseOrder());
7+
p2 = new PriorityQueue<>();
78
}
89

910
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+
}
1216

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());
1521
}
1622
}
1723

1824
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+
}
2032
}
2133
}

0 commit comments

Comments
 (0)