class
Solution {
public
:
struct
compare {
bool
operator()(pair<
int
,
int
> p1,
pair<
int
,
int
> p2)
{
if
(p1.second == p2.second)
return
p1.first < p2.first;
return
p1.second < p2.second;
}
};
vector<
int
> topK(vector<
int
>& nums,
int
k)
{
int
n = nums.size();
vector<
int
> ans;
unordered_map<
int
,
int
> mp;
for
(
int
i = 0; i < n; i++)
mp[nums[i]]++;
priority_queue<pair<
int
,
int
>,
vector<pair<
int
,
int
> >, compare>
pq(mp.begin(), mp.end());
for
(
int
i = 1; i <= k; i++) {
ans.push_back(pq.top().first);
pq.pop();
}
return
ans;
}
};