利用快排的思想
class Solution {
public:
int qsort(vector<pair<int,int>>& v,int start, int end)
{
int pivot = v[start].second;
while(start<end)
{
while(start<end && v[end].second<pivot)
{
end--;
}
if(start<end)
{
swap(v[start],v[end]);
start++;
}
while(start<end && v[start].second>=pivot)
{
start++;
}
if(start<end)
{
swap(v[start],v[end]);
end--;
}
}
return start;
}
void Quicksort(vector<pair<int,int>>& v,int start, int end)
{
int mid;
if(start<end)
{
mid = qsort(v,start,end);
Quicksort(v,start,mid-1);
Quicksort(v,mid+1,end);
}
}
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> map;
for(int i =0;i<nums.size();i++)
{
map[nums[i]]++;
}
vector<pair<int,int>> values;
for(auto&kv:map)
{
values.push_back(kv);
}
Quicksort(values,0,values.size()-1);
vector<int> result;
for(int i =0;i<k;i++)
{
result.push_back(values[i].first);
}
return result;
}
};