LeetCode: Top K Frequent Elements

来源:互联网 发布:钉钉邮箱 绑定域名 编辑:程序博客网 时间:2024/06/11 00:35

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

For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2].

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 logn), wheren is the array's size.


题目解析:找出一个数组中出现频率最高的k个数

算法:这里可以先排序再统计,时间复杂度为O(nlog(n))

源代码:

class Solution {public:    vector<int> topKFrequent(vector<int>& nums, int k) {        unordered_map<int, int> cnt;        unordered_map<int, int>::iterator it;        int len = nums.size();                for (int i = 0; i < len; ++i) {            cnt[nums[i]]++;        }                multimap<int, int, greater<int> > mmp;        for (it = cnt.begin(); it != cnt.end(); ++it) {            mmp.insert(pair<int, int>(it->second, it->first));        }                vector<int> res(k, 0);        multimap<int, int, greater<int> >::iterator mit;        int i = 0;        for (i = 0, mit = mmp.begin(); i < k; ++i, ++mit) {            res[i] = mit->second;        }                return res;            }};


1 0