这题难在于这是一个Data Stream,实时的数据哗啦哗啦进来,需要run time 非常快的data structure.

蛮力法:【会time out.】

进阶版:
要怎么能够做到O(1)的速度呢?首先,排序肯定不可能,O(nlogn)可以直接过滤不考虑。O(1)的data structure 我知道的有 List, Stack, Heap?【直接从top拿东西】
嗯,写不出来。找答案。。。
答案非常的绕...大部分的computation 在 addNum里, findMedian就没有太多计算。用两个PriorityQueue来装东西. 很明显,Small Queue是按越小的东西摆越上面。 Large Queue是按越大的东西摆越上面。但是他这里并没有specify Queue的priority在初始化的过程中,使用的是默认款。
然后用负号来实现queue的类型。比如说一个最大的数100, -100以后就变成了最小的数。
所以-large.poll() 相当于把Large Queue里最小的扔到small Queue里。
然后尽量保持两个Queue的size一样大,一旦不一样,匀一点到另一个。
【神一样的脑洞想出的答案】
建议面试中不要使用这种写法,还是specify queue类型比较好。这种unique的写法出来就知道是抄的。。
Also, Collections.reverseOrder specify Max Heap.

修改版homemade solution:

最Tricky的两个点 1. Queue的设立要符合这个逻辑:

2. 每次添加的时候,先往FirstHalf加一个元素,然后把FirstHalf里最小的丢给SecondHalf. 我一开始没写这个。一直往FirstHalf加的话SecondHalf永远没东西。