LeetCode 347. 前 K 个高频元素

📅 2026/7/23 22:16:06 👁️ 阅读次数 📝 编程学习
LeetCode 347. 前 K 个高频元素

给你一个整数数组nums和一个整数k,请你返回其中出现频率前k高的元素。你可以按任意顺序返回答案。

示例 1:

输入:nums = [1,1,1,2,2,3], k = 2

输出:[1,2]

示例 2:

输入:nums = [1], k = 1

输出:[1]

示例 3:

输入:nums = [1,2,1,2,1,2,3,1,3,2], k = 2

输出:[1,2]

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104
  • k的取值范围是[1, 数组中不相同的元素的个数]
  • 题目数据保证答案唯一,换句话说,数组中前k个高频元素的集合是唯一的

进阶:你所设计算法的时间复杂度必须优于O(n log n),其中n是数组大小。

class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int,int> freq; for(auto x:nums) freq[x]++; priority_queue<pair<int,int>,vector<pair<int,int>>,greater<>> minHeap; for(auto& [i,j]:freq) { minHeap.push({j,i}); if((int)minHeap.size()>k) minHeap.pop(); } vector<int> ans; while(!minHeap.empty()) { ans.push_back(minHeap.top().second); minHeap.pop(); } return ans; } };