diff --git a/notes/41.1 数据流中的中位数.md b/notes/41.1 数据流中的中位数.md
index 1ed76391..0e8f956c 100644
--- a/notes/41.1 数据流中的中位数.md
+++ b/notes/41.1 数据流中的中位数.md
@@ -10,6 +10,12 @@
## 解题思路
+用两个堆把数据分成较小的一半和较大的一半:left 是大顶堆,存较小的一半,堆顶是这一半的最大值;right 是小顶堆,存较大的一半,堆顶是这一半的最小值。让 right 的元素个数等于 left 或比 left 多一个,中位数就只和两个堆顶有关:总数为奇数时是 right 的堆顶,为偶数时是两个堆顶的平均值。插入的时间复杂度为 O(logN),查找中位数为 O(1)。
+
+新元素不能直接放进要变多的那个堆,因为它可能比另一个堆的堆顶更大或更小。做法是先放进另一个堆,再把那个堆的堆顶移过来。例如 left = {1, 2}、right = {5, 8} 时:
+
+
+
```java
class MedianFinder {
@@ -25,10 +31,10 @@ class MedianFinder {
}
public void addNum(int num) {
- /* 插入要保证两个堆存于平衡状态 */
+ /* 插入要保证两个堆处于平衡状态 */
if (N % 2 == 0) {
/* N 为偶数的情况下插入到右半边。
- * 因为右半边元素都要大于左半边,但是新插入的元素不一定比左半边元素来的大,
+ * 因为右半边元素都要大于左半边,但是新插入的元素不一定比左半边元素来得大,
* 因此需要先将元素插入左半边,然后利用左半边为大顶堆的特点,取出堆顶元素即为最大元素,此时插入右半边 */
left.add(num);
right.add(left.poll());
diff --git a/notes/pics/offer41-median-heaps.png b/notes/pics/offer41-median-heaps.png
new file mode 100644
index 00000000..68323d0d
Binary files /dev/null and b/notes/pics/offer41-median-heaps.png differ