解法一:粗暴排序法
最簡單粗暴的思路就是 使用排序演算法對元素按照頻率由高到低進行排序,然後再取前 kk 個元素。
以下十種排序演算法,任你挑選!
可以發現,使用常規的諸如 冒泡、選擇、甚至快速排序都是不滿足題目要求,它們的時間複雜度都是大於或者等於 o(n logn)o(nlogn),而題目要求演算法的時間複雜度必須優於 o(n log n)o(nlogn)。
解法二:
對於優先佇列的實現原理在這裡,加強理解:點我跳轉
**如下:
class
solution};
vector<
int>
topkfrequent
(vector<
int>
& nums,
int k)
// 定義乙個小頂堆,大小為k
priority_queue
int,
int>
, vector
int,
int>>
, com> pri_que;
for(
auto it = map.
begin()
; it != map.
end(
); it++)}
// 找出前k個高頻元素,因為小頂堆先彈出的是最小的,所以倒敘來輸出到陣列
vector<
int>
result
(k);
for(
int i = k -
1; i >=
0; i--
)return result;}}
;
題解參考: 前k個高頻單詞
題目 給一非空的單詞列表,返回前 k 個出現次數最多的單詞。返回的答案應該按單詞出現頻率由高到低排序。如果不同的單詞有相同出現頻率,按字母順序排序。示例 1 輸入 i love leetcode i love coding k 2 輸出 i love 解析 i 和 love 為出現次數最多的兩個單詞...
前 K 個高頻元素
給定乙個非空的整數陣列,返回其 現頻率前 k 高的元素。示例 1 輸入 nums 1,1,1,2,2,3 k 2 輸出 1,2 示例 2 輸入 nums 1 k 1 輸出 1 說明 你可以假設給定的 k 總是合理的,且 1 k 陣列中不相同的元素的個數。你的演算法的時間複雜度必須優於 o n log...
前k個高頻元素
給定乙個非空的整數陣列,返回其 現頻率前 k 高的元素。示例 1 輸入 nums 1,1,1,2,2,3 k 2 輸出 1,2 示例 2 輸入 nums 1 k 1 輸出 1 說明 你可以假設給定的 k 總是合理的,且 1 k 陣列中不相同的元素的個數。你的演算法的時間複雜度必須優於 o n log...