棧與佇列 TOP K問題 前 K 個高頻元素

2021-10-19 22:52:17 字數 997 閱讀 3812

解法一:粗暴排序法

最簡單粗暴的思路就是 使用排序演算法對元素按照頻率由高到低進行排序,然後再取前 kk 個元素。

以下十種排序演算法,任你挑選!

可以發現,使用常規的諸如 冒泡、選擇、甚至快速排序都是不滿足題目要求,它們的時間複雜度都是大於或者等於 o(n log⁡n)o(nlog⁡n),而題目要求演算法的時間複雜度必須優於 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...