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]
输出数组内最重复的k个数。emmm,看到这题我就想到了map+排序,先用map统计数组内元素个数,然后按照个数来排序,取前k个最大个数的数。
class Solution {
public:
struct cmp
{
bool operator()(pair<int, int> p1, pair<int, int> p2)
{
return p1.second > p2.second;
}
};
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> m;
vector<int> res;
if (nums.empty()) return res;
for (auto a : nums)
{
m[a]++;
}
vector<pair<int,int>> tmp(m.begin(), m.end());
sort(tmp.begin(), tmp.end(), cmp());
while (k-->0)
{
res.push_back(tmp[k].first);
}
sort(res.begin(), res.end(), less<int>());
return res;
}
};