Skip to content

Commit e28a44a

Browse files
committed
find median from data stream
1 parent a26370d commit e28a44a

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import java.util.PriorityQueue
2+
class MedianFinder() {
3+
// 1 2 3 4 5
4+
// 중간값을 기준으로
5+
// 3
6+
// 2 4
7+
// 1 5
8+
// 1 2 : maxHeap
9+
// 4 5 : minHeap
10+
private val maxHeap = PriorityQueue<Int> { a, b -> b - a }
11+
private val minHeap = PriorityQueue<Int>()
12+
13+
// TC: O(log n)
14+
// SC: O(n)
15+
fun addNum(num: Int) {
16+
if(maxHeap.isEmpty() || maxHeap.peek() >= num) {
17+
maxHeap.add(num)
18+
} else {
19+
minHeap.add(num)
20+
}
21+
22+
if(maxHeap.size > minHeap.size + 1) {
23+
minHeap.add(maxHeap.poll())
24+
} else if(minHeap.size > maxHeap.size) {
25+
maxHeap.add(minHeap.poll())
26+
}
27+
}
28+
29+
fun findMedian(): Double {
30+
if(maxHeap.size == minHeap.size) {
31+
return (maxHeap.peek() + minHeap.peek()) / 2.0
32+
} else {
33+
return maxHeap.peek().toDouble()
34+
}
35+
}
36+
37+
}

0 commit comments

Comments
 (0)