Leetcode 347. Top K Frequent Elements
2016-06-15 20:51
309 查看
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 log n), where n is the array’s size.
主要分两步 : 第一步就是用unordered_map统计各个数字的次数,key为数字,value为次数。第二步就是针对次数进行排序。因为map默认是对key值升序排序,所以本题重点是第二步。第二步不能再构造key为次数,value为次数的map,因为不同数的次数可能一样,而map中key值是独一性的;所以为了方便,方法一使用sort,方法二使用priority_queue。当然map也可以按方法一sort那样自己重载排序规则。
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 log n), where n is the array’s size.
主要分两步 : 第一步就是用unordered_map统计各个数字的次数,key为数字,value为次数。第二步就是针对次数进行排序。因为map默认是对key值升序排序,所以本题重点是第二步。第二步不能再构造key为次数,value为次数的map,因为不同数的次数可能一样,而map中key值是独一性的;所以为了方便,方法一使用sort,方法二使用priority_queue。当然map也可以按方法一sort那样自己重载排序规则。
bool compare(pair<int,int> &a, pair<int,int> &b){ return a.second>b.second; } class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int,int> cnt; vector<int> res; for(auto &x:nums) cnt[x]++; vector<pair<int,int> > hist; for (auto &x:cnt){ hist.push_back(make_pair(x.first,x.second)); } sort(hist.begin(),hist.end(),compare); for (int i=0;i<k;i++){ res.push_back(hist[i].first); } return res; } };
class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int,int> map; for(int num : nums) map[num]++; vector<int> res; priority_queue<pair<int,int> > pq; for(auto it = map.begin(); it != map.end(); it++){ pq.push(make_pair(it->second, it->first)); if(pq.size() > (int)map.size() - k){ res.push_back(pq.top().second); pq.pop(); } } return res; } };
相关文章推荐
- 在命令行用 sort 进行排序
- Linux Shell - 如何使用sort与uniq命令删除重复的文本行
- Redis sort 排序命令详解
- 批处理命令教学之字符串排序(sort)
- mysql Sort aborted: Out of sort memory, consider increasing server sort buffer size的解决方法
- C++ 关于STL中sort()对struct排序的方法
- C#中Arraylist的sort函数用法实例分析
- Js中sort()方法的用法
- js采用concat和sort将N个数组拼接起来的方法
- 如何写JS数组sort的比较函数
- javascript中sort()的用法实例分析
- 详解Matlab中 sort 函数用法
- js模拟实现Array的sort方法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- js表数据排序 sort table data
- javascript 数组排序函数sort和reverse使用介绍
- JavaScript Table排序 2.0 (更新)
- js中数组(Array)的排序(sort)注意事项说明
- Javascript数组的排序 sort()方法和reverse()方法
- Java数据结构及算法实例:插入排序 Insertion Sort