[問題] leetcode sliding window median

作者: sean72 (.)   2017-10-09 08:04:18
https://leetcode.com/problems/sliding-window-median/description/
leetcode裡面python解法對我來說有點玄
(mur mur 那個解法提供者的python code每次都短到爆,而且很難讀懂 T_T)
有人知道這題python該怎麼解嗎?
我的解法 參考網路上搜到的java解法
https://repl.it/MSNr/3
維持左邊一個maxheap, 右邊一個minheap
median為maxheap top
每次window往右滑動,則判斷新數字大於或是小於media,
往左邊或是右邊的heap加入一個元素
並且減去剛剛脫離window那個數字
但是會超時
我猜我的瓶頸應該是在remove之後重新heapify ,這裡需要O(klogk)
java用treeset or priorityQueue remove只需要O(k)時間
作者: flarehunter (Range)   2017-10-09 10:14:00
heap的remove應該是O(log n)吧?你要不要自己實作heap看看
作者: ckc1ark (偽物)   2017-10-09 23:30:00
我印象中heapq是有個_siftup 不過leetcode不給用XD
作者: edwar (海邊的野孩子)   2017-10-09 23:52:00
樓主程式我調整成自寫的remove可從1.09s->0.2s,真的建議自己實作.
作者: ckc1ark (偽物)   2017-10-10 00:37:00
看到有人像我用lazy remove http://tinyurl.com/ybmpn74j不過我是用Counter 他是用set

Links booklink

Contact Us: admin [ a t ] ucptt.com