LeetCode 🟢 703. Kth Largest Element in a Stream
🔗 🟢 703. Kth Largest Element in a Stream
tags: 樹(Tree)
二元樹(Binary Tree)
二元搜尋樹(BST)
堆積(Heap)
排序(Sorting)
二分搜索(Binary Search)
資料流(Data Stream)
設計(Design)
題意
設計一個類別來找出資料流中第 大的元素。注意,是排序後的第 大元素,而不是第 個不同的元素。
實現 KthLargest
類別:
KthLargest(int k, int[] nums)
使用整數 和整數流 初始化對象。int add(int val)
將 添加到資料流中,並返回資料流中第 大的元素。
思路:維護一個大小為 的最小堆積(Min Heap)
根據題意,一個數在加入到資料流中就不會被移除,因此只需要考慮最大的 個元素即可。而在這 個元素中,可以使用 最小堆積(Min Heap) 來維護其中的最小值,故只需要維護一個大小為 的最小堆積 即可,堆頂的元素即為整個資料流中第 大的元素。
當新元素 被添加到資料流中時,我們將其推入堆積 。如果此時堆積的大小超過 ,移除堆頂元素,並更新堆頂為新的第 大元素。如此,我們便能夠隨時查詢資料流中的第 大元素。
複雜度分析
- 時間複雜度:,其中 為資料流的長度。
- 每次插入都需要 的時間,總共需要插入 次。
- 空間複雜度:,即堆積的大小。
1 | class KthLargest: |
1 | class KthLargest { |
寫在最後
Cover photo is remixed from @吃肥皂泡泡, thanks for their work!
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 十六個天亮!
評論
WalineGiscus