前 K 个高频元素

347. 前 K 个高频元素

给你一个整数数组 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 个高频元素的集合是唯一的
 1 #include <iostream>
 2 #include <unordered_map>
 3 #include <vector>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 class Solution {
 8 public:
 9     vector<int> topKFrequent(vector<int>& nums, int k) {
10         unordered_map<int, int> hashMap;
11         for (const auto &val : nums) {
12             hashMap[val]++;
13         }      
14 
15         vector<std::pair<int, int>> vec1(hashMap.begin(), hashMap.end());
16         // 按照数字出现的次数进行降序排列
17         sort(vec1.begin(), vec1.end(), [](std::pair<int, int> p1, std::pair<int, int> p2) {
18             return p1.second > p2.second;
19         });
20         vector<int> ans;
21         for (int i = 0; i < k; i++) {
22             ans.push_back(vec1[i].first);
23         }
24         return ans;
25     }
26 };
27 int main()
28 {
29     Solution *test = new Solution();
30     vector<int> vec = {1, 1, 1, 2, 2, 3};
31     int k = 2;
32     vector<int> ans = test->topKFrequent(vec, k); // {1, 2}
33     unsigned int i = 0;
34     std::cout << "[";
35     for (const auto &val : ans) {
36         std::cout << val;
37         i++;
38         if (i < ans.size()) {
39             std::cout << ", ";
40         }
41     }
42     std::cout << "]" << endl;
43 
44     delete test;
45     system("pause");
46     return 0;
47 }

 

posted @ 2022-03-06 00:04  跳动的休止符  阅读(78)  评论(0)    收藏  举报