Skip to content

Commit cc30a1f

Browse files
committed
find-median-from-data-stream solution (py)
1 parent 39da955 commit cc30a1f

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# ๋‘ ๊ฐœ๋กœ ๋‚˜๋ˆ ์„œ ์ €์žฅํ•˜๋ฉด,
2+
# ํ™€์ˆ˜๊ฐœ์˜ ์ˆซ์ž์ผ ๊ฒฝ์šฐ: ์ฒซ ๋ฒˆ์งธ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด๋‚˜ ๋‘ ๋ฒˆ์งธ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด ์ค‘์•™๊ฐ’
3+
# ์ง์ˆ˜๊ฐœ์˜ ์ˆซ์ž์ผ ๊ฒฝ์šฐ: ์ฒซ ๋ฒˆ์งธ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’๊ณผ ๋‘ ๋ฒˆ์งธ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์˜ ํ‰๊ท 
4+
# => ํž™ ํ™œ์šฉ
5+
# ์ˆซ์ž ์ถ”๊ฐ€์‹œ ์ž‘์€ ๊ฐ’๋“ค => ์ตœ๋Œ€ ํž™, ํฐ ๊ฐ’๋“ค => ์ตœ์†Œ ํž™์— ์Œ์ˆ˜๋กœ ์ €์žฅ! ์ตœ๋Œ€ ํž™์˜ ๋ชจ๋“  ๊ฐ’ โ‰ค ์ตœ์†Œ ํž™์˜ ๋ชจ๋“  ๊ฐ’
6+
# ์ตœ๋Œ€ ํž™์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ตœ์†Œ ํž™์œผ๋กœ ์ด๋™
7+
# ๋งŒ์•ฝ ์ตœ์†Œ ํž™ ํฌ๊ธฐ๊ฐ€ ๋” ํฌ๋ฉด ๋‹ค์‹œ ํ•˜๋‚˜๋ฅผ ์ตœ๋Œ€ ํž™์œผ๋กœ ์ด๋™
8+
# ๋‘ ํž™๊ฐ„์˜ ํฌ๊ธฐ ์ฐจ์ด ํ•ญ์ƒ 0 ๋˜๋Š” 1 ์œ ์ง€
9+
# TC: addNum O(log n), findMedian O(1)
10+
# SC: O(n)
11+
12+
import heapq
13+
14+
class MedianFinder:
15+
def __init__(self):
16+
self.max_heap = [] # ์ตœ๋Œ€ ํž™ (์Œ์ˆ˜๋กœ ์ €์žฅ)
17+
self.min_heap = [] # ์ตœ์†Œ ํž™
18+
19+
def addNum(self, num: int) -> None:
20+
# 1. ์ตœ๋Œ€ ํž™์— ๋จผ์ € ์‚ฝ์ž… (์Œ์ˆ˜๋กœ)
21+
heapq.heappush(self.max_heap, -num)
22+
23+
# 2. max_heap์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ min_heap์œผ๋กœ ์˜ฎ๊น€ (์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ์œ ์ง€)
24+
heapq.heappush(self.min_heap, -heapq.heappop(self.max_heap))
25+
26+
# 3. min_heap์ด max_heap๋ณด๋‹ค ์ปค์ง€๋ฉด, ๋‹ค์‹œ max_heap์œผ๋กœ ์˜ฎ๊น€ (๊ท ํ˜• ์œ ์ง€)
27+
if len(self.min_heap) > len(self.max_heap):
28+
heapq.heappush(self.max_heap, -heapq.heappop(self.min_heap))
29+
30+
def findMedian(self) -> float:
31+
if len(self.max_heap) == len(self.min_heap):
32+
return (-self.max_heap[0] + self.min_heap[0]) / 2
33+
else:
34+
return -self.max_heap[0]
35+
36+
# Your MedianFinder object will be instantiated and called as such:
37+
# obj = MedianFinder()
38+
# obj.addNum(num)
39+
# param_2 = obj.findMedian()

0 commit comments

Comments
ย (0)