347. Top K Frequent Elements

Given a non-empty array of integers, return the k most frequent elements.

Example 1:

Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]

Example 2:

Input: nums = [1], k = 1
Output: [1]

Note:

  • You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
  • Your algorithm's time complexity must be better than O(n log n), where n is the array's size.

 

求出现频率最多的 k 个数

 

统计每个数出现的频率,对频率进行桶排序

 

C++:

 1 class Solution {
 2 public:
 3     vector<int> topKFrequent(vector<int>& nums, int k) {
 4         unordered_map<int,int> map ;
 5         for(int num : nums){
 6             map[num]++ ;
 7         }
 8         vector<vector<int> > buckets(nums.size() + 1) ;
 9         for(auto m : map){
10             buckets[m.second].push_back(m.first) ;
11         }
12         vector<int> res ;
13         for(int i = buckets.size() - 1 ; i >= 0 && res.size() < k ; i--){
14             for(int j : buckets[i]){
15                 res.push_back(j) ;
16                 if (res.size() == k)
17                     break ;
18             }
19         }
20         return res ;
21     }
22 };

 

posted @ 2019-01-11 15:30  __Meng  阅读(147)  评论(0编辑  收藏  举报