前 K 個高頻元素

2021-10-08 16:24:51 字數 1058 閱讀 3986

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

eg:

輸入: nums = [1,1,1,2,2,3], k = 2

輸出: [1,2]

eg:

輸入: nums = [1], k = 1

輸出: [1]

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

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

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

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

**思路:首先用unordered_map()進行對映,記錄每次出現的值,

然後用優先佇列,進行k項插值。

然後輸出 。如此的簡介明了。

注意裡面的unordered_map的使用,他可以直接用key作為索引,非常的方便,查詢非常的快速。

同時priority_queue的使用也要注意一下,可以看

最後稍微注意一下他們插值用的是emplace(),和emplace_back()來代替push和push_back();

他們是可以直接接受元素的,直接在容器裡面進行構造。減少了拷貝。

class solution 

//有限佇列,大堆頂,用pair作為引數

//先比較第一元素,第乙個元素相等比較第二個元素

priority_queue, vector>, greater>> pqueue;

//遍歷整個map 方法1

//unordered_map::iterator it = map.begin();

//for ( ; it !=map.end(); it++)

////}

//遍歷整個map 方法2

for (auto& i : map)

}while (!pqueue.empty())

return result;

}};

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

前k個高頻元素

使用unorderedmap借用雜湊來統計數字出現的頻率,然後題目要求複雜度是nlogn,所以借用multimap來自動排序 此時因為需要排序所以使用頻率來作為key。最後使用倒迭代器,來將結果壓倒vector中附註 1.multimap iterator it1 st.rbegin 這種寫法會出錯...