1. 程式人生 > 實用技巧 >Leetcode刷題 - Top K 系列

Leetcode刷題 - Top K 系列

347.Top K Frequent Elements

class Solution {
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {
        // hash map 儲存frequency
        unordered_map<int, int> map;
        for (int num : nums)
            map[num]++;
        
        vector<int> ans;
        // use priority queue to build max heap
        priority_queue<pair<int,int>> pq; 
        // 迭代map加入堆中,尋找最大頻率對應的數
        for(auto iter = map.begin(); iter != map.end(); iter ++){
            pq.push(make_pair(iter->second, iter->first));
            if (pq.size() > map.size() - k){
                ans.push_back(pq.top().second);
                // 加入ans中,彈出堆頂元素
                pq.pop();
            }
        }
        return ans;
    }
};

總結

1. 識別最大K個元素模式:

  • 如果你需要求最大/最小/最頻繁的前K個元素
  • 如果你需要通過排序去找一個特定的數

  

參考資料

  1. https://leetcode.com/problems/top-k-frequent-elements/