题目描述
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
示例
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
输入: nums = [1], k = 1
输出: [1]
解题思路
利用map将数组nums中的值统计个数并按关键字排序得到countmap。
利用multimap将countmap中的数按第二个值降序排列得到sortmap。
用vector的push_back存储前k个高频的元素,返回vector。
C++ 完整代码
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
map<int,int> countmap;
for(int &e:nums)
countmap[e]++;
multimap<int,int,greater<int>>sortmap;
for(const auto&s:countmap)
sortmap.insert(make_pair(s.second,s.first));
vector<int>v;
multimap<int,int>::iterator it=sortmap.begin();
while(it!=sortmap.end()&&k--)
{
v.push_back(it->second);
++it;
}
return v;
}
};