703. Kth Largest Element in a Stream
題目網址:https://leetcode.cn/problems/kth-largest-element-in-a-stream/
題意:設計一個找到 stream 中第
k
大的元素。注意是排序後的第k
大元素, 而非第k
個不同的元素。實現
KthLargest
class:
KthLargest(int k, int[] nums)
:使用k
和nums
來初始化 instanceint add(int val)
:將val
加入倒nums
中, 並返回第k
大的元素
Solution:
想法:利用 Heap, 使用 min heap
pq
來記錄前k
大的元素, 其中pq.top()
代表當前第k
大的元素
KthLargest(k, nums)
:先 pushnums[i]
, 然後確認pq.size()
是否 > k。若是的話, 則把pq.top()
給 pop 掉, 讓pq
的元素個數維持在k
個add(val)
:先 pushval
, 然後確認pq.size()
是否> k
。若是的話, 則把pq.top()
給 pop 掉, 讓pq
的元素個數維持在k
個
class KthLargest { |
- time:
KthLargest(k, nums)
:$O(n \cdot log(k))$, 其中n
為nums
中的元素個數, 因為 heap 要 add / delete 元素皆需花 $O(log(k))$ 來調整 heapadd(val)
:$O(log(k))$ ➔ heap 要 add / delete 元素皆需花 $O(log(k))$ 來調整 heap
- space:$O(k)$ ➔
pq
中的元素不超過k + 1
個
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論