## Problem

Problem ID: 347

Title: Top K Frequent Elements

Difficulty: Medium

Description: Given an integer array nums and an integer `k`, return the `k` most frequent elements. You may return the answer in any order.

## Thoughts

This problem is relatively straight forward with C++’s ordered set.

## Solution

Find the frequency for each number `O(N)`. Insert the number and frequency into an ordered set that orders the number by the frequency. Whenever the size of the set exceeds `k` remove the number with the lowest frequency.

### Implementation

``````class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> num_freq;
for (const int num : nums) num_freq[num]++;

set<pair<int,int>> most_freq;
for (const auto& [num, freq] : num_freq) {
most_freq.insert({freq, num});
if (most_freq.size() > k) {
most_freq.erase(most_freq.begin());
}
}

vector<int> ans;
for (const auto& [freq, num] : most_freq) {
ans.push_back(num);
}
return ans;
}
};
``````