347. 前 K 个高频元素
1 class Solution 2 { 3 public: 4 vector<int> topKFrequent(vector<int>& nums, int k) 5 { 6 vector<int> res; 7 unordered_map<int,int> hash; 8 for(auto a : nums) hash[a] ++; 9 priority_queue<pair<int,int>> pq; 10 for(auto a : hash) pq.push({a.second,a.first}); 11 while(k --) 12 { 13 if(!pq.empty()) 14 { 15 res.push_back(pq.top().second); 16 pq.pop(); 17 } 18 } 19 return res; 20 } 21 };
1 class Solution 2 { 3 public: 4 //对出现的次数进行排序,且从大到小进行排序 5 //你可以按任意顺序返回答案 6 int partition(vector<pair<int,int>> &a,int start, int end) 7 { 8 //int index = start + rand() % (end - start + 1); 9 //swap(a[index],a[end]); //随机化 10 11 int small = start - 1; 12 for(int i = start;i < end;i ++) 13 if(a[i].second > a[end].second) 14 swap(a[i],a[++small]); 15 swap(a[++small],a[end]); 16 return small; 17 } 18 19 void select(vector<pair<int,int>> &a,int l,int r,int k) 20 { 21 if(l >= r) return; 22 int j = partition(a,l,r); 23 int k1 = k - 1; 24 if(k1 == j) return; // j刚好等于k1 25 else if(k1 < j) select(a,l,j - 1,k); 26 else select(a,j + 1,r,k); 27 } 28 29 vector<int> topKFrequent(vector<int>& nums, int k) 30 { 31 unordered_map<int,int> ma; 32 for(int i : nums) ma[i] ++; 33 vector<pair<int,int>> ve(ma.begin(),ma.end()); 34 vector<int> res; 35 select(ve,0,ve.size() - 1,k); 36 for(int i = 0;i < k;i ++) res.push_back(ve[i].first); 37 return res; 38 } 39 };
Mamba never out

浙公网安备 33010602011771号