力扣347 前 K 個高頻元素

2021-10-09 06:48:52 字數 636 閱讀 1120

給定乙個非空的整數陣列,返回其**現頻率前k高的元素。

你可以假設給定的 k 總是合理的,且 1 ≤ k ≤ 陣列中不相同的元素的個數。

你的演算法的時間複雜度必須優於 o(n log n) , n 是陣列的大小。

題目資料保證答案唯一,換句話說,陣列中前 k 個高頻元素的集合是唯一的。

你可以按任意順序返回答案。

思路:top k個最大的,用最小堆,每次插入新來元素後把堆頂最小的刪除。

用雜湊表記錄次數

建立並維護最小堆

輸出最小堆

c++

struct cmp

};class solution

//top k 最大的,建立最小堆

//用優先佇列來實現堆,預設最大堆,c++始終把優先順序高的放在堆頂

priority_queue, vector>, cmp> q;

for(unordered_map::iterator it = m.begin(); it != m.end(); ++it)

vectorres;

while(!q.empty())

return res;

}};

力扣347 前 K 個高頻元素

這道題主要涉及的是對資料結構裡雜湊表 小頂堆的理解,優化時可以參考一些排序方法。給定乙個非空的整數陣列,返回其 現頻率前 k 高的元素。示例 1 輸入 nums 1,1,1,2,2,3 k 2 輸出 1,2 示例 2 輸入 nums 1 k 1 輸出 1 說明 原題url 為了解決這道題,我們首先需...

347 前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...

347 前 K 個高頻元素

維護乙個size是k的堆。求前k大的數,用小根堆 求前k小的數,用大根堆 求前k大,當堆的sizek時,去掉堆頂,最終堆中的資料就是最後的答案。如陣列arr 求最大的前3個數 一般來說求前k大 小,陣列中數是很大的,直接用排序,在選擇前k大 小的話,效率不高 首先建立堆,其size 0,一直push...