Top K Frequent Elements Problem & Solution

See the top k frequent elements problem on LeetCode.

C++ Solution

#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx,avx2,fma")

static const int _=[](){ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);return 0;}();

class Solution {
public:
  vector<int> topKFrequent(vector<int>& nums, int k) {
    unordered_map<int, int> freq;
    for (auto num : nums) { // O(n)
      ++freq[num]; // O(1)
    }

    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
    for (auto [q, v] : freq) { // O(n)
      pq.push({v, q}); // O(logn)

      if (pq.size() > k) { // O(1)
        pq.pop(); // O(1)
      }
    }

    vector<int> results;
    while (!pq.empty()) { // O(n)
      results.push_back(pq.top().second); // O(1)
      pq.pop(); // O(1)
    }

    return results;
  }
};

Start Here

Many paths, there are. Follow yours, you must.