top-k问题,用哈希表+小顶堆解决
class Solution
{
public:
struct cmp
{
template <typename T, typename U>
bool operator()(T const &left, U const &right)
{
return left.second < right.second;
}
};
vector<int> topKFrequent(vector<int> &nums, int k)
{
vector<int> res;
map<int, int> mapping;
priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> pq;
for (int i = 0; i < nums.size(); i++)
{
mapping[nums[i]] += 1;
}
for (auto m : mapping)
{
pq.push(make_pair(m.first, m.second));
}
while (pq.size() > mapping.size() - k)
{
res.push_back(pq.top().first);
pq.pop();
}
return res;
}
};