题目:
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
思路:
输出频率前k高的元素。
使用最小堆,堆中保存的最后k个元素就是所求的值。
class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int,int> m; for(auto n:nums){ m[n]++; } priority_queue<Node> q; for(auto it:m){ q.push(Node(it.first,it.second)); } while(q.size()>k){ q.pop(); } vector<int> ret; while(!q.empty()){ Node node=q.top(); q.pop(); ret.push_back(node.num); } return ret; } struct Node{ int num; int freq; Node(int n,int f){ num=n; freq=f; } bool operator<(const Node& b)const{ return freq>b.freq; } }; };