TopK问题——统计大家最爱玩的游戏
2017-06-29 10:04
260 查看
问题:统计大家最爱玩的前K种游戏
思路:大体思路是用库里的map来存放数据pair< string,int>可以统计。然后再比较int的值建大堆,堆排序之后取出前K的元素,存放在数组里返回。
代码:
测试:
测试结果:
思路:大体思路是用库里的map来存放数据pair< string,int>可以统计。然后再比较int的值建大堆,堆排序之后取出前K的元素,存放在数组里返回。
代码:
//核心代码 #include<algorithm> #include<map> #include<string> #include<vector> using namespace std; class Greater { public: bool operator()(pair<string, int>p1, pair<string, int>p2) { return p1.second > p2.second;//重载(),注意要比较second的值大小。 } }; vector<string> FavoriteGamesTopK(vector<string>& game , int K) { vector<string>TopKGame; map<string, int> Countmap;//创建数据结构存储数据 map<string, int>::iterator It;//设置迭代器遍历 for (size_t i = 0; i < game.size(); ++i) { //方案一 判断插入 It = Countmap.find(game[i]); if (It != Countmap.end()) { //找到 It->second++; } else Countmap.insert(pair<string, int>(game[i],1)); //方案二 用operator[]插入。 //Countmap[game[i]]++; //operator[]底层实现是用insert,也就是判断有就给sceond++,没有就插入。 } vector<pair<string,int>> heap; heap.insert(heap.begin(),Countmap.begin(), Countmap.end());//把Countmap的元素插入到heap中 make_heap(heap.begin(),heap.end(),Greater());//建立大堆 这里默认的缺省值为less,就是小堆,所以自己给出了仿函数Greater()来实现建立大堆 sort_heap(heap.begin(), heap.end(), Greater()); for (int i = 0; i <K; ++i)//取出前K的元素 { TopKGame.push_back(heap[i].first); } return TopKGame; }
测试:
void TestGetTopK() { vector<string> games; games.push_back("英雄联盟"); games.push_back("王者荣耀"); games.push_back("王者荣耀"); games.push_back("DNF"); games.push_back("CS:GO"); games.push_back("英雄联盟"); games.push_back("王者荣耀"); games.push_back("DNF"); games.push_back("王者荣耀"); games.push_back("data2"); games.push_back("data2"); games.push_back("魔法王座"); games.push_back("贪玩蓝月"); games.push_back("英雄联盟"); vector<string> ret=FavoriteGamesTopK(games,5);//K=5 for (int i = 0; i < ret.size(); ++i) { cout <<"Top "<<i+1<<":"<< ret[i] <<endl ; } } int main() { TestGetTopK(); return 0; }
测试结果:
相关文章推荐
- 汇总 Vue 中大家最爱问的高频问题
- 一个XML数据统计问题,期待大家的讨论
- 关于EntityFramework 实例的问题(此贴为统计大家的使用习惯和原因)
- 在决定开发游戏之前的15个问题
- 这是我们公司总结的一些关于中文乱码问题的一些解决方案和经验和大家分享!
- 游戏平衡问题
- 从问题到语言游戏
- 用序列化搞定了游戏记录问题
- 24点游戏探秘系列6:用概率统计的眼光看24点游戏
- 继续发两道面试中遇到的问题,大家做做看。^_^
- 关于统计的一个sql问题,使用动态sql语句实现。
- 中国游戏行业市场分析(一)关于国内游戏制作的问题
- 欢迎大家一起讨论一下pb界面中的问题
- 大家晚上好,小弟刚刚接触java。有些问题不是很理解,希望大家给予帮助。
- 一个〈深入浅出mfc〉这本书中的一个问题,请大家多多次教
- 俺现在碰到一些问题请大家帮忙???
- 紧急招聘.NET软件工程师 这个我只能当技术问题发了呀,大家见谅
- 有个小问题,大家一起研究。
- 游戏贴图问题 [小糊涂的灵感]
- 客户端改变状态,服务器服务器端读不到数据的问题,大家有什么好的解决方法.