LeetCode刷题---哈希表---347
前 K 个高频元素
347. 前 K 个高频元素 - 力扣(LeetCode)
题目:
给你一个整数数组 nums
和一个整数 k
,请你返回其中出现频率前 k
高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2]
示例 2:
输入: nums = [1], k = 1 输出: [1]
提示:
1 <= nums.length <= 105
k
的取值范围是[1, 数组中不相同的元素的个数]
- 题目数据保证答案唯一,换句话说,数组中前
k
个高频元素的集合是唯一的
自己的思路和代码
思路:
其实很简单的一道题。无非就是设置两个哈希表,第一个哈希表(不允许重复)记录每个元素已经每一个元素出现的次数。第二个哈希表(允许重复),将第一个哈希表的第一维和第二维进行对调。按序输出就可以了。
代码:
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> table;
multimap<int, int> standard;
vector<int> result;
for(int i=0; i<nums.size(); i++) {
table[nums[i]]++;
}
for(auto itr=table.begin(); itr!=table.end(); itr++) {
standard.insert({itr->second, itr->first});
}
int sum = 1;
for(auto itr=standard.rbegin(); itr!=standard.rend(); itr++) {
if(sum<=k) result.push_back(itr->second);
sum++;
//printf("%d %d\n", itr->first, itr->second);
}
return result;
}
};