Given a non-empty array of integers, return the k most frequent elements.
Example 1:
Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]
Example 2:
Input: nums = [1], k = 1
Output: [1]
Note:
- You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
- Your algorithm’s time complexity must be better than O(n log n), where n is the array’s size.
利用unordered_map统计nums中各个元素出现的次数,然后将他们放入到pair中,将出现的次数作为pair的first,将元素本身作为pair的second,再利用set的自动排序,找到出现次数最大的前K
个元素。
vector<int> topKFrequent(vector<int>& nums, int k)
{
unordered_map<int, int> ma;
for(int a : nums)ma[a]++;
set<pair<int, int>> se;
for(unordered_map<int, int>::iterator it = ma.begin(); it != ma.end(); it++)
se.insert(make_pair(it->second, it->first));
set<pair<int, int>>::reverse_iterator i = se.rbegin();
vector<int> result;
for(int j = 0; j < k; j++)
result.push_back((*i++).second);
return result;
}