Time Cost

11min1s

Implementation

Use min heap to save k-th frequent elements

Code

  • Solution
    class Solution {
    public:
      vector<int> topKFrequent(vector<int>& nums, int k) {
          unordered_map<int, int> counts;
          for (int num: nums) {
              if (counts.count(num)) {
                  counts[num]++;
              }else{
                  counts[num]=0;
              }
          }
    
          priority_queue<pair<int, int>, 
              vector<pair<int, int>>, 
              greater<pair<int, int>>> minheap;
            
          for (auto const& [key, value]: counts) {
              if (minheap.size() < k) {
                  minheap.emplace(value, key);
              }else{
                  if (value > minheap.top().first) {
                      minheap.pop();
                      minheap.emplace(value, key);
                  }
              }
          }
    
          vector<int> result;
          while (!minheap.empty()) {
              result.push_back(minheap.top().second);
              minheap.pop();
          }
    
          return result;
      }
    };