leetcode笔记—map容器的使用
2016-05-19 20:49
218 查看
Given
k = 2, return
用一个map容器记下每个元素出现的次数,再用优先级队列按从大到小存下Map的元素
class Solution {
typedef pair<int, int> data;
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
map<int,int> mapint;
priority_queue<data, vector<data>, greater<data>> heap;
vector<int> re;
vector<int> res;
for(int i=0;i<nums.size();i++) // 统计每个元素的个数
{
if(mapint.find(nums[i])==mapint.end())
mapint[nums[i]]=1;
else mapint[nums[i]]++;
}
for(auto it:mapint) {
heap.push(make_pair(it.second, it.first));
if(heap.size() > k) heap.pop();
}
while(!heap.empty())
{
re.push_back(heap.top().second);
heap.pop();
}
for(int i=re.size()-1;i>=0;i--)
{
res.push_back(re[i]);
}
return res;
}
};
网上较优的代码
class Solution {
typedef pair<int, int> data;
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> hash;
priority_queue<data, vector<data>, greater<data>> heap;
vector<int> ret;
for(int num:nums)
hash[num]++;
for(auto it:hash) {
heap.push(make_pair(it.second, it.first));
if(heap.size() > k) heap.pop();
}
while(!heap.empty()) {
ret.push_back(heap.top().second);
heap.pop();
}
return ret;
}
};
用排列桶
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> hash;
vector<vector<int>> buckets(nums.size()+1);
vector<int> ret;
for(int num:nums)
hash[num]++;
for(auto it:hash)
buckets[it.second].push_back(it.first);
for(int i=buckets.size()-1; i>0; --i) {
for(auto num:buckets[i]) {
ret.push_back(num);
if(ret.size() == k) return ret;
}
}
return ret;
}
};
[1,1,1,2,2,3]and
k = 2, return
[1,2].
用一个map容器记下每个元素出现的次数,再用优先级队列按从大到小存下Map的元素
class Solution {
typedef pair<int, int> data;
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
map<int,int> mapint;
priority_queue<data, vector<data>, greater<data>> heap;
vector<int> re;
vector<int> res;
for(int i=0;i<nums.size();i++) // 统计每个元素的个数
{
if(mapint.find(nums[i])==mapint.end())
mapint[nums[i]]=1;
else mapint[nums[i]]++;
}
for(auto it:mapint) {
heap.push(make_pair(it.second, it.first));
if(heap.size() > k) heap.pop();
}
while(!heap.empty())
{
re.push_back(heap.top().second);
heap.pop();
}
for(int i=re.size()-1;i>=0;i--)
{
res.push_back(re[i]);
}
return res;
}
};
网上较优的代码
class Solution {
typedef pair<int, int> data;
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> hash;
priority_queue<data, vector<data>, greater<data>> heap;
vector<int> ret;
for(int num:nums)
hash[num]++;
for(auto it:hash) {
heap.push(make_pair(it.second, it.first));
if(heap.size() > k) heap.pop();
}
while(!heap.empty()) {
ret.push_back(heap.top().second);
heap.pop();
}
return ret;
}
};
用排列桶
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> hash;
vector<vector<int>> buckets(nums.size()+1);
vector<int> ret;
for(int num:nums)
hash[num]++;
for(auto it:hash)
buckets[it.second].push_back(it.first);
for(int i=buckets.size()-1; i>0; --i) {
for(auto num:buckets[i]) {
ret.push_back(num);
if(ret.size() == k) return ret;
}
}
return ret;
}
};
相关文章推荐
- hdu 4709 Herding
- html总结
- 蓝桥杯 算法提高 拿糖果
- 深入理解Activity启动模式(一)–Activity与进程,线程的关系
- hdu4973 A simple simulation problem.(成段更新+下标转化)
- java读写ini文件、FileOutputStream
- 字符与字节
- POJ 1625 Censored!
- DFS解答树的过程(1045)
- MySQL修改root密码的各种方法整理
- 查询MySQL中某个数据库中有多少张表
- 找水王
- 灰色预测--matlab&python实现
- 三种方式展示透明界面
- kafka和flume整合
- 全栈增长工程师指南
- EK算法应用,构图(POJ1149)
- 贯通 Android 底层驱动至应用层APP接口流程
- 文件批量重命名神器:Bulk Rename Utility
- Python教程:[69]strip()函数详解