腾讯面试:前 K 个高频元素
生活随笔
收集整理的這篇文章主要介紹了
腾讯面试:前 K 个高频元素
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:?
給定一個非空的整數數組,返回其中出現頻率前?k?高的元素。
示例 1:
輸入: nums = [1,1,1,2,2,3], k = 2 輸出: [1,2]示例 2:
輸入: nums = [1], k = 1 輸出: [1] class Solution { public:static bool cmp(pair<int, int>& m, pair<int, int>& n) {return m.second > n.second;}vector<int> topKFrequent(vector<int>& nums, int k) {unordered_map<int, int> occurrences;for (auto& v : nums) {occurrences[v]++;}// pair 的第一個元素代表數組的值,第二個元素代表了該值出現的次數priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(&cmp)> q(cmp);for (auto& [num, count] : occurrences) {if (q.size() == k) {if (q.top().second < count) {q.pop();q.emplace(num, count);}} else {q.emplace(num, count);}}vector<int> ret;while (!q.empty()) {ret.emplace_back(q.top().first);q.pop();}return ret;} };利用小頂堆:
如果堆的元素個數小于 kk,就可以直接插入堆中。
如果堆的元素個數等于 kk,則檢查堆頂與當前出現次數的大小。如果堆頂更大,說明至少有 kk 個數字的出現次數比當前值大,故舍棄當前值;否則,就彈出堆頂,并將當前值插入堆中。
?
參考地址:https://leetcode-cn.com/problems/top-k-frequent-elements/solution/qian-k-ge-gao-pin-yuan-su-by-leetcode-solution/
?
?
總結
以上是生活随笔為你收集整理的腾讯面试:前 K 个高频元素的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 根据身高重现队列
- 下一篇: golang获取当前正规时间