347. Top K Frequent Elements
題目網址:https://leetcode.cn/problems/top-k-frequent-elements/
題意:給一 array
nums
和一整數k
, 返回出現頻率前k
高的元素。可以按任何順序返回答案。進階:請設計 $O(n \cdot log(n))$ time 的演算法, 其中
n
為nums.size()
。
Solution:
想法:利用 Heap
- 計算每種元素的出現次數
- 直接將元素 push 到 min heap
pq
中- 若
pq.size() > k
, 代表現在pq
中有k + 1
個元素, 故把最小的元素給 pop 掉, 讓pq
元素個數始終保持在k
個- 此時,
pq
中的元素為前k
大的元素, 將其取出即可
class Solution { |
- time: $O(n \cdot log(k))$ ➔
pq
最多 insert / deleten
個點, 每次操作需 $O(log(k))$, 因為pq
中最多k + 1
個點, 其中n
為nums
的元素個數 - space: $O(n)$ ➔
freqs
最大長度為n
, 而pq
的最大長度為k + 1
, 其中n ≥ k
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論