前 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 <= 105k的取值范围是[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 }
浙公网安备 33010602011771号