Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 90c2646

Browse files
committed
feat: add python and java solutions to lcci question: 17.20.Continuous Median
https://lc.netlify.app/#/lcci/17.20.Continuous%20Median/README
1 parent 2cc8917 commit 90c2646

File tree

4 files changed

+166
-3
lines changed

4 files changed

+166
-3
lines changed

‎lcci/17.20.Continuous Median/README.md‎

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,75 @@ findMedian() -> 2
3131

3232
## 解法
3333
<!-- 这里可写通用的实现逻辑 -->
34-
34+
- 创建大根堆、小根堆,其中:大根堆存放较小的一半元素,小根堆存放较大的一半元素。
35+
- 添加元素时,若两堆元素个数相等,放入小根堆(使得小根堆个数多1);若不等,放入大根堆(使得大小根堆元素个数相等)
36+
- 取中位数时,若两堆元素个数相等,取两堆顶求平均值;若不等,取小根堆堆顶。
3537

3638
### Python3
3739
<!-- 这里可写当前语言的特殊实现逻辑 -->
3840

3941
```python
42+
class MedianFinder:
43+
44+
def __init__(self):
45+
"""
46+
initialize your data structure here.
47+
"""
48+
self.max_heap = []
49+
self.min_heap = []
50+
51+
52+
def addNum(self, num: int) -> None:
53+
if len(self.max_heap) == len(self.min_heap):
54+
heapq.heappush(self.min_heap, -heapq.heappushpop(self.max_heap, -num))
55+
else:
56+
heapq.heappush(self.max_heap, -heapq.heappushpop(self.min_heap, num))
4057

58+
def findMedian(self) -> float:
59+
return (-self.max_heap[0] + self.min_heap[0]) / 2 if len(self.max_heap) == len(self.min_heap) else self.min_heap[0]
60+
61+
62+
# Your MedianFinder object will be instantiated and called as such:
63+
# obj = MedianFinder()
64+
# obj.addNum(num)
65+
# param_2 = obj.findMedian()
4166
```
4267

4368
### Java
4469
<!-- 这里可写当前语言的特殊实现逻辑 -->
4570

4671
```java
47-
72+
class MedianFinder {
73+
private Queue<Integer> minHeap;
74+
private Queue<Integer> maxHeap;
75+
76+
/** initialize your data structure here. */
77+
public MedianFinder() {
78+
minHeap = new PriorityQueue<>();
79+
maxHeap = new PriorityQueue<>((a, b) -> b - a);
80+
}
81+
82+
public void addNum(int num) {
83+
if (minHeap.size() == maxHeap.size()) {
84+
maxHeap.offer(num);
85+
minHeap.offer(maxHeap.poll());
86+
} else {
87+
minHeap.offer(num);
88+
maxHeap.offer(minHeap.poll());
89+
}
90+
}
91+
92+
public double findMedian() {
93+
return minHeap.size() == maxHeap.size() ? (minHeap.peek() + maxHeap.peek()) / 2.0 : minHeap.peek();
94+
}
95+
}
96+
97+
/**
98+
* Your MedianFinder object will be instantiated and called as such:
99+
* MedianFinder obj = new MedianFinder();
100+
* obj.addNum(num);
101+
* double param_2 = obj.findMedian();
102+
*/
48103
```
49104

50105
### ...

‎lcci/17.20.Continuous Median/README_EN.md‎

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,66 @@ findMedian() -&gt; 2
5959
### Python3
6060

6161
```python
62+
class MedianFinder:
6263

64+
def __init__(self):
65+
"""
66+
initialize your data structure here.
67+
"""
68+
self.max_heap = []
69+
self.min_heap = []
70+
71+
72+
def addNum(self, num: int) -> None:
73+
if len(self.max_heap) == len(self.min_heap):
74+
heapq.heappush(self.min_heap, -heapq.heappushpop(self.max_heap, -num))
75+
else:
76+
heapq.heappush(self.max_heap, -heapq.heappushpop(self.min_heap, num))
77+
78+
def findMedian(self) -> float:
79+
return (-self.max_heap[0] + self.min_heap[0]) / 2 if len(self.max_heap) == len(self.min_heap) else self.min_heap[0]
80+
81+
82+
# Your MedianFinder object will be instantiated and called as such:
83+
# obj = MedianFinder()
84+
# obj.addNum(num)
85+
# param_2 = obj.findMedian()
6386
```
6487

6588
### Java
6689

6790
```java
68-
91+
class MedianFinder {
92+
private Queue<Integer> minHeap;
93+
private Queue<Integer> maxHeap;
94+
95+
/** initialize your data structure here. */
96+
public MedianFinder() {
97+
minHeap = new PriorityQueue<>();
98+
maxHeap = new PriorityQueue<>((a, b) -> b - a);
99+
}
100+
101+
public void addNum(int num) {
102+
if (minHeap.size() == maxHeap.size()) {
103+
maxHeap.offer(num);
104+
minHeap.offer(maxHeap.poll());
105+
} else {
106+
minHeap.offer(num);
107+
maxHeap.offer(minHeap.poll());
108+
}
109+
}
110+
111+
public double findMedian() {
112+
return minHeap.size() == maxHeap.size() ? (minHeap.peek() + maxHeap.peek()) / 2.0 : minHeap.peek();
113+
}
114+
}
115+
116+
/**
117+
* Your MedianFinder object will be instantiated and called as such:
118+
* MedianFinder obj = new MedianFinder();
119+
* obj.addNum(num);
120+
* double param_2 = obj.findMedian();
121+
*/
69122
```
70123

71124
### ...
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class MedianFinder {
2+
private Queue<Integer> minHeap;
3+
private Queue<Integer> maxHeap;
4+
5+
/** initialize your data structure here. */
6+
public MedianFinder() {
7+
minHeap = new PriorityQueue<>();
8+
maxHeap = new PriorityQueue<>((a, b) -> b - a);
9+
}
10+
11+
public void addNum(int num) {
12+
if (minHeap.size() == maxHeap.size()) {
13+
maxHeap.offer(num);
14+
minHeap.offer(maxHeap.poll());
15+
} else {
16+
minHeap.offer(num);
17+
maxHeap.offer(minHeap.poll());
18+
}
19+
}
20+
21+
public double findMedian() {
22+
return minHeap.size() == maxHeap.size() ? (minHeap.peek() + maxHeap.peek()) / 2.0 : minHeap.peek();
23+
}
24+
}
25+
26+
/**
27+
* Your MedianFinder object will be instantiated and called as such:
28+
* MedianFinder obj = new MedianFinder();
29+
* obj.addNum(num);
30+
* double param_2 = obj.findMedian();
31+
*/
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class MedianFinder:
2+
3+
def __init__(self):
4+
"""
5+
initialize your data structure here.
6+
"""
7+
self.max_heap = []
8+
self.min_heap = []
9+
10+
11+
def addNum(self, num: int) -> None:
12+
if len(self.max_heap) == len(self.min_heap):
13+
heapq.heappush(self.min_heap, -heapq.heappushpop(self.max_heap, -num))
14+
else:
15+
heapq.heappush(self.max_heap, -heapq.heappushpop(self.min_heap, num))
16+
17+
def findMedian(self) -> float:
18+
return (-self.max_heap[0] + self.min_heap[0]) / 2 if len(self.max_heap) == len(self.min_heap) else self.min_heap[0]
19+
20+
21+
# Your MedianFinder object will be instantiated and called as such:
22+
# obj = MedianFinder()
23+
# obj.addNum(num)
24+
# param_2 = obj.findMedian()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /