703. Kth Largest Element in a Stream
題目網址:https://leetcode.cn/problems/kth-largest-element-in-a-stream/
題意:設計一個找到 stream 中第
k大的元素。注意是排序後的第k大元素, 而非第k個不同的元素。實現
KthLargestclass:
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!
評論